如果我有以下 SQL 块(在 SQL SERVER 2008 R2 中):
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
我担心第二个语句不会拾取第一个已删除的数据。请注意,返回是因为这是存储过程的一部分。我对级联删除或加入不感兴趣,我有点受限于这种方法。