2015-07-13 50 views
1

我需要一些幫助大聲笑!我有一個帶有try/catch塊的存儲過程。所以它工作正常,但是當我嘗試通過放入應該碰到catch塊的值進行測試時,它似乎並沒有這樣做。我的catch塊有沒有錯,它不會回滾事務?就像壞數據被放入數據庫一樣,即使它不應該。我究竟做錯了什麼??先謝謝你!多個IF語句在catch塊回滾

begin try 
Begin Transaction 
Insert Into ProcessingRequestQueue(PRQID,PRQTarget, PRQStatus, PRQCommand, PRQCDSRNO) 
Values (newid(),'CARDSIEVER','I',@PRQCommand,@cdsrno) 
commit 
End Try 

Begin Catch 
IF (@cdsrno = 0 and (@cdsrno is null or @cdsrno = '')) 

or (@PRQCommand is null or @PRQCommand = '') 
rollback 


End Catch 
END 

回答

0

漁獲只能如果INSERT有例外,在查詢中有2個可能的情況,以提高例外,否則CATCHNEVER到達。

  1. 您對PRQID和NEWID()主鍵生成一個重複的值(這是不可能發生的)
  2. 您對PRQCommand或PRQCDSRNO唯一索引,並且您提供非空值,它已經存在在表

更好的方法是將變量檢查插入之前,然後回滾沒有任何條件。

+0

哦,你說的對!我忘了嘗試/捕捉如何工作的基礎知識!謝謝。 –

0

試試這個

BEGIN TRANSACTION 
BEGIN TRY 
INSERT ProcessingRequestQueue(PRQID,PRQTarget, PRQStatus, PRQCommand, PRQCDSRNO) 
Values (newid(),'CARDSIEVER','I',@PRQCommand,@cdsrno) 
IF @cdsrno = 0 OR @cdsrno is null or @cdsrno = '' or @PRQCommand is null or @PRQCommand = '' 
BEGIN<br> 
ROLLBACK TRANSACTION 
END 
BEGIN CATCH 
ROLLBACK TRANSACTION 
END CATCH 
+0

我會試試這個。謝謝! –