开发者

How can I terminate a stored procedure?

开发者 https://www.devze.com 2023-03-27 03:25 出处:网络
CREATE PROCEDURE [dbo].[DeleteUser] -- Add the parameters for the stored procedure here @original_UserID nvarchar(64) = UserID,
    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开发者_JAVA技巧_UserID
END

I tried using return but it didn't work

P/S: I use this stored procedure in a girdview, which is contained in an updatePanel, I dont know this can cause problem or not


Just use the return statement:

RAISERROR('Error message', 16, 1)
RETURN


RAISERROR will throw an exception to the nearest catch block. So adding exception handling to your code will give the desired effect..

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


Another option is to use error trapping:

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

You can alter the SEVERITY of the error in the last RAISERROR to force a terminating error as well.

0

精彩评论

暂无评论...
验证码 换一张
取 消