gpt4 book ai didi

sql - INSERT 和 DELETE 在同一个事务中?

转载 作者:行者123 更新时间:2023-12-04 22:06:29 24 4
gpt4 key购买 nike

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

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

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

最佳答案

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

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

关于sql - INSERT 和 DELETE 在同一个事务中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39087472/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com