5
如果出現錯誤,我可以回滾事務:TSQL交易的聲明後,都檢查@@ ERROR和@@ ROWCOUNT
CREATE PROCEDURE [dbo].[MySproc]
(
@Param1 [int]
)
AS
BEGIN TRAN
SET NOCOUNT ON;
SELECT @Param1
UPDATE [dbo].[Table1]
SET Col2 = 'something'
WHERE Col1 = @Param1
IF @@ERROR <> 0
BEGIN
ROLLBACK TRAN
RETURN -12
END
...
但是,如果有在Table1
沒有條目與Col1 = @Param1
事務成功提交,這對我不利。我想檢查Col2 = 'something'
是否真的完成。如果不是,則使用特定的返回碼回滾。
如果我嘗試後@@error
檢查插入@@rowcount
檢查,如下所示:
CREATE PROCEDURE [dbo].[MySproc]
(
@Param1 [int]
)
AS
BEGIN TRAN
SET NOCOUNT ON;
SELECT @Param1
UPDATE [dbo].[Table1]
SET Col2 = 'something'
WHERE Col1 = @Param1
IF @@ERROR <> 0
BEGIN
ROLLBACK TRAN
RETURN -12
END
IF @@ROWCOUNT = 0
BEGIN
ROLLBACK TRAN
RETURN -27
END
...
它總是回滾在這一點上,因爲@@rowcount
評估最後的語句,因此它總是等於0
。
如何在這樣的情況下,同時檢查@@error
和行數的影響?
+1。是的。這是一個經典錯誤。 –