Как я могу прекратить хранимую процедуру? - PullRequest
0 голосов
/ 11 августа 2011
    CREATE PROCEDURE [dbo].[DeleteUser] 
-- Add the parameters for the stored procedure here
@original_UserID nvarchar(64) = UserID,
@temp int =0

    AS
    BEGIN
SELECT @temp = COUNT(*) FROM dbo.Users WHERE ManagerID = @original_UserID
END

BEGIN
IF(@temp>0)

    RAISERROR ('This user is manager of other user',
           16, -- Severity.
           1 -- State.
           );
           //Error occurred / Terminate the stored procedure 
END

BEGIN
SELECT @temp = COUNT(*) FROM dbo.Project WHERE ProjectManagerID = @original_UserID
END

Я пытался использовать возврат, но он не работал

P / S: я использую эту хранимую процедуру в girdview, которая содержится в updatePanel, я не знаю, может это вызвать проблему или нет

Ответы [ 3 ]

3 голосов
/ 11 августа 2011

Просто используйте оператор возврата:

RAISERROR('Error message', 16, 1)
RETURN
1 голос
/ 11 августа 2011

RAISERROR сгенерирует исключение для ближайшего блока catch.Поэтому добавление обработки исключений в ваш код даст желаемый эффект.

BEGIN TRY

  BEGIN
    SELECT @temp = COUNT(*) FROM dbo.Users WHERE ManagerID = @original_UserID
  END

  BEGIN
   IF(@temp>0)
     RAISERROR ('This user is manager of other user',
                16, -- Severity.
                1 -- State.
                );
                //Error occurred / jump to the catch block
  END

  BEGIN
    SELECT @temp = COUNT(*) FROM dbo.Project WHERE ProjectManagerID = @original_UserID
  END

END TRY
BEGIN CATCH
  ...
END CATCH

http://msdn.microsoft.com/en-us/library/ms178592(v=sql.90).aspx

1 голос
/ 11 августа 2011

Другой вариант - использовать перехват ошибок:

BEGIN TRY
<your current code>
END TRY

BEGIN CATCH
    IF @@TRANCOUNT > 0 ROLLBACK

    SELECT  @ErrMsg = ERROR_MESSAGE(),
            @ErrSeverity = ERROR_SEVERITY()

    SET @Msg = 'Error in Procedure XYZ!' 
    RAISERROR(@Msg, 0, 1) WITH NOWAIT

    RAISERROR(@ErrMsg, @ErrSeverity, 1)  WITH NOWAIT
END CATCH

Вы можете изменить SEVERITY ошибки в последнем RAISERROR, чтобы также принудительно завершить ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...