需要关于此的一些想法..我有一个Temp_Table与一些数据。根据Temp_Table中的数据,我将删除表(外键)中的相关行,然后将Temp-table中的所有数据插入到table1中。像下面的例子。在同一事务中插入和删除?
知道我们在这里只用了几百行,而不是每天添加或更改太多的行也很重要。而且,我正在SSIS中的分离任务中运行插入/删除语句,该语句正在工作。
问题!! 以什么方式可以放置一个锁在Server2.Table1(独占我supose)并在放开该锁之前同时运行Delete和Insert语句?我不希望任何人在执行删除/插入操作时读取或写入表1。请注意,删除操作必须在 Insert语句之前运行。
有没有一种方法是SSIS来做到这一点?或者我可以在开始时使用Begin事务并在语句后提交事务?我担心Delete和Insert会在同一个事务中同时运行,是吗?可能有一些好方法可以做到这一点,但我还没有弄清楚。
我还没有用我最好的朋友Google找到一个明确的答案。我想绝对肯定之前,我尝试一些东西..
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
THX /安德烈亚斯
将这些语句置于BEGIN TRANSACTION ... COMMIT之间不会同时运行它们(它们将一起提交/回滚)。取决于您的隔离级别,所获取的任何锁定将保留在位,直到事务完成或回退 – SteveR
让我们先问您到底想要完成什么。您正在删除表中与临时表相关的所有行,然后插入临时表结果。如果行存在,你真的试图执行UPDATE,如果它们不存在则插入?您可以使用临时表来跟踪要修改的记录,以便锁定不会影响,或者可以按照以下建议使用输出,或者? – Matt
我应该补充一点,如果你确实需要在整个表上获得一个锁,你可以在删除之前把它抛出:SELECT 1 FROM Table1 WITH(TABLOCKX) – SteveR