如果我有以下SQL塊(在SQL Server 2008 R2):SQL「DELETE」語句後跟「WHERE NOT IN」語句是否在同一事務中?
BEGIN
BEGIN TRAN
DELETE FROM dbo.fooData
WHERE LastUpdate < DateAdd(hour, -1,GETUTCDATE())
COMMIT
BEGIN TRAN
DELETE FROM dbo.barData
WHERE SessionID NOT IN (SELECT sub.SessionId FROM dbo.fooData sub)
COMMIT
RETURN 0
END
我假設我必須做一個明確的語句之間COMMIT,以便從fooData被刪除的數據中顯示出來第二次刪除。它是否正確?理想情況下,我希望所有這些都在一次交易中。例如:
BEGIN
BEGIN TRAN
DELETE FROM dbo.fooData
WHERE LastUpdate < DateAdd(hour, -1,GETUTCDATE())
DELETE FROM dbo.barData
WHERE SessionID NOT IN (SELECT sub.SessionId FROM dbo.fooData sub)
COMMIT
RETURN 0
END
我擔心的是第二條語句不會拿起第一條被刪除的數據。請注意,返回是因爲這是存儲過程的一部分。我對級聯刪除或加入不感興趣,我有點受限於這種方法。
感謝您的快速響應,很高興有驗證的預感。很快就會測試。 – Brian 2011-05-02 15:13:37