2013-07-19 46 views
1

這裏是我的存儲過程,在那裏我覺得每一件事情是正確的SQL錯誤 - EXECUTE指示BEGIN和COMMIT語句的不匹配數

ALTER PROC USP_D_Delete 
(
    @ID INT=NULL, 
    @RETURN INT OUTPUT 
) 
AS 
BEGIN 

    SET NOCOUNT ON; 

    BEGIN TRY 
     BEGIN TRAN 

     BEGIN 

      DELETE FROM PE WHERE ID [email protected] 

     END 

     COMMIT 

     SET @RETURN = 1 
     RETURN @RETURN 

    END TRY 
    BEGIN CATCH 

     ROLLBACK 
     SET @RETURN = 0 
     RETURN @RETURN 

    END CATCH 

END 

當我嘗試從UI IAM越來越誤差

執行此
Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT statements.Previous count = 0, current count = 1 

任何幫助請,我無法找到解決辦法,因爲我覺得這個語法是正確的,tryed後提交,ROLLBACK此外,它沒有用..

+0

請,你能不能短語一個問題嗎?它做了什麼,你想要做什麼? – contradictioned

+0

也許如果你給交易一個名字..'BEGIN TRAN t1','COMMIT TRAN t1','ROLLBACK TRAN t1' – contradictioned

+0

@contradictioned你想給這個交易命名並試試嗎? –

回答

1

也許你需要添加一個字TRANcommitrollback如下:

ALTER PROC USP_D_Delete 
(
    @ID INT=NULL, 
    @RETURN INT OUTPUT 
) 
AS 
BEGIN  
    SET NOCOUNT ON;  
    BEGIN TRY 
     BEGIN TRAN  
     BEGIN  
      DELETE FROM PE WHERE ID [email protected]  
     END  
     COMMIT TRAN  
     SET @RETURN = 1 
     RETURN @RETURN  
    END TRY 
    BEGIN CATCH  
     ROLLBACK TRAN 
     SET @RETURN = 0 
     RETURN @RETURN  
    END CATCH  
END 
0

也許我失去了一些東西,但恕我直言,有一個在您SP代碼沒有任何意義,因爲它是:

  1. DELETE語句爲原子,不需要明確的交易
  2. 您的SP將始終返回1,因爲如果您向DELETE提供不存在的ID,它將默默執行並且不會刪除任何內容。唯一可能出錯並導致例外的是缺少PE表。但在這種情況下,你沒有任何回滾。

話雖這麼說,整個SP可以歸結爲唯一的DELETE聲明

相關問題