這是我的代碼。這很簡單:第一個INSERT
失敗,而最後兩個成功。我認爲BEGIN/COMMIT TRAN之間的所有內容都被認爲是成功或失敗的一項交易?
在我繼續之前,我想澄清一點,我明白我可以插入IF statement
與@@ERROR
或BEGIN ROLLBACK
這將解決問題。我知道這個問題怎麼解決。
由於腳本中的兩個INSERT都在BEGIN/COMMIT TRAN
之間,所以我認爲這將被視爲單個事務。所以在我的情況下,由於1st INSERT
失敗,所以我認爲以下INSERT
s不會執行或不會被提交。看來情況並非如此。
BEGIN TRAN
和COMMIT TRAN
的用途是否能夠在它們之間使用@@ERROR
函數和/或ROLLBACK TRAN
?
IF OBJECT_ID('tempdb..#testTable') IS NOT NULL DROP TABLE #testTable
create table #testTable
(
Id int not null,
Name varchar(100)
)
BEGIN TRAN T1;
insert into #testTable select null, 'Joe';
-- select @@ERROR
if @@ERROR = 0
BEGIN
insert into #testTable select 1, 'Bob';
insert into #testTable select 2, 'Ralph';
END
COMMIT TRAN T1;
select * From #testTable
謝謝。
是否有一些這方面的資料? –
@ roryap - https://msdn.microsoft.com/en-us/library/ms175010.aspx「因爲表變量的作用域有限,不是持久數據庫的一部分,所以它們不受事務回滾的影響。」 –
謝謝@SeanLange! (我正在尋找 - 你發現:-)) –