我想使用沒有嘗試捕獲的事務。但我不知道分配回滾。以下聲明總是提交。請幫幫我。 @@錯誤可以捕獲一個錯誤。所以,我不想用這個。使用沒有嘗試捕獲的事務
BEGIN TRANSACTION
INSERT Person values (@name,@age);
INSERT User values (@name,@age);
IF @@TRANCOUNT>0
COMMIT TRANSACTION
ELSE
ROLLBACK TRANSACTION
我想使用沒有嘗試捕獲的事務。但我不知道分配回滾。以下聲明總是提交。請幫幫我。 @@錯誤可以捕獲一個錯誤。所以,我不想用這個。使用沒有嘗試捕獲的事務
BEGIN TRANSACTION
INSERT Person values (@name,@age);
INSERT User values (@name,@age);
IF @@TRANCOUNT>0
COMMIT TRANSACTION
ELSE
ROLLBACK TRANSACTION
隨時你BEGIN TRANSACTION
然後@@TRANCOUNT
增加。
所以,因爲你沒有一次增加它,那麼它將永遠是>0
你大概的意思來檢查IF (@@ERROR > 0) ROLLBACK TRAN
而且,我會鼓勵你,讓你知道你使用的命名事務回滾正確的交易(如果沒有其他原因可追溯)
zanhtet不想使用@@錯誤-1與偏見! – 2011-03-08 03:43:15
BEGIN TRANSACTION
INSERT Person values (@name,@age);
INSERT User values (@name,@age);
IF @@ERROR == 0
COMMIT TRANSACTION
ELSE
ROLLBACK TRANSACTION
@@錯誤只捕獲最後一個語句錯誤代碼,但如果您檢查後每個插入語句 - 我認爲你會達到預期的行爲。
BEGIN TRANSACTION
INSERT Person values (@name,@age);
IF (@@ERROR <> 0) BEGIN
PRINT 'Unexpected error occurred!'
ROLLBACK TRAN
RETURN 1
END
INSERT User values (@name,@age);
IF (@@ERROR <> 0) BEGIN
PRINT 'Unexpected error occurred!'
ROLLBACK TRAN
RETURN 1
END
COMMIT TRANSACTION
如果陳述有很多,那麼檢查每個陳述。 – zanhtet 2011-03-08 03:46:14
如果你有很多交易 - 你可以使用GOTO來減少你需要複製/粘貼的代碼量 – Sergey 2011-03-08 03:48:34
通過同樣的邏輯,我們可以使用遊標和臨時表...... – jcolebrand 2011-03-08 03:50:12
你對這個@zahntet仍然感到困惑,或者你最終弄清楚爲什麼@@ trancount總是在零以上的事實? – jcolebrand 2011-06-03 18:56:02