次の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
fooDataから削除されたデータが2回目の削除で表示されるようにするには、ステートメント間で明示的なCOMMITを実行する必要があると想定しています。これは正しいです?理想的には、これらすべてを1つのトランザクションにまとめたいと思います。例:
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
私の恐れは、2番目のステートメントが最初の削除されたデータを取得しないことです。これはストアドプロシージャの一部であるため、リターンがあります。削除のカスケードや結合には興味がありません。この方法には多少の制約があります。