2011-08-11 35 views
0
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,我不知道這會引起問題或不

+1

什麼是所有那些'BEGIN/END'塊?你可以顯示整個「CREATE PROCEDURE」語句嗎? –

+0

至少顯示你如何使用'RETURN'試圖「沒有工作」。它應該可以工作,並且它可以放置在一個條件塊中。否則,存儲過程在到達過程結束時返回。 – hardmath

回答

1

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

3

只需使用return語句:

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

他說RETURN不會幫忙,有趣... – sll

+0

這需要包括在一個條件塊內。 – hardmath

+0

-1對於'我嘗試使用返回,但它沒有工作'你迴應'只使用返回' – JNK

1

另一種選擇是使用錯誤捕獲:

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 

您可以在最後的RAISERROR中更改錯誤的SEVERITY以強制終止錯誤。