INSERT 和 DELETE 在同一个事务中?

And*_*eas 5 sql sql-server ssis

我有一个包含一些数据的 Temp_Table。根据Temp_Table中的数据,删除其他表中的相关行,然后将Temp-table中的所有数据插入到table1中。就像下面的例子。

我可以通过什么方式在 Server2.Table1 上放置一个锁(我认为是独占的)并在释放该锁之前运行 Delete 和 Insert 语句?我不希望任何人在执行删除/插入操作时读取或写入 Table1。请注意,Delete 必须在 Insert 语句之前运行。

SSIS 有没有办法做到这一点?或者我可以在开始时使用开始事务并在语句之后提交事务吗?我担心删除和插入会在同一个事务中同时运行。

DELETE Table1 
FROM Table1 t1
    INNER JOIN (    
       SELECT Column2 FROM Temp_Table
       GROUP BY Column2
    ) t2 ON t1.Column2 = t2.Column2

INSERT INTO Table1
SELECT (Column1, Column2...)
FROM Temp_Table
Run Code Online (Sandbox Code Playgroud)

And*_*eas 1

SteveR的评论是正确的,事务中的Insert和Delete语句没有同时运行。在对非生产数据库进行一些测试后,我得到了以下结果:

BEGIN TRY
    BEGIN TRAN T1;

DELETE Table1 
FROM Table1 t1
    INNER JOIN (    
       SELECT Column2 FROM Temp_Table
       GROUP BY Column2
    ) t2 ON t1.Column2 = t2.Column2

INSERT INTO Table1 (Column 1, Column2...)
SELECT (Column1, Column2...)
FROM Temp_Table

COMMIT TRAN T1;

END TRY
BEGIN CATCH
        ROLLBACK TRAN T1;
END CATCH
Run Code Online (Sandbox Code Playgroud)

首先执行Delete 语句,然后执行Insert 语句。并且语句之间不会释放Exclusive锁。