如何保证所有数据都插入到同一个事务的表中?

时间:2017-07-18 02:07:19

标签: sql sql-server sql-server-2014

我有一个插入查询,如下所示:

INSERT INTO Data1 (column1, column2)
SELECT column1, column2 FROM Data2

此查询大约需要30秒。在30秒内,有人可能会在查询仍在运行时插入,删除或修改Data2表中的数据。如何在相同的交易中阻止或包含更改?

2 个答案:

答案 0 :(得分:0)

修改您的查询(NOLOCK) 使用此

INSERT INTO Data1 (column1, column2)
SELECT column1, column2 FROM Data2 WITH(NOLOCK)

这将有效。

答案 1 :(得分:0)

如果您需要绝对肯定必须在插入期间进行数据更改,则可以使用TABLOCKX查询提示...

INSERT INTO Data1 WITH (TABLOCKX) (column1, column2)
SELECT column1, column2 FROM Data2 WITH (TABLOCKX);

这将为您提供两个表的独占锁,直到事务完成。