2017-07-18 67 views
-1

我有一个插入查询,看起来像这样:如何保证所有数据在同一事务中被插入到表中?

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

这个查询大约需要30秒。在该30秒内,在查询仍在运行时,有人可能会在Data2表中插入,删除或修改数据。我该如何防止这种情况发生,或者在同一事务中包含更改?

+2

单个插入语句应该发生在单个事务中。 –

+0

我相信,当一个表正在被修改时,它可以独占访问它,所有其他请求将被排队,直到INSERT完成。也许你想要做多个查询,在这种情况下,你回答了你自己的问题,使用交易。 – Havenard

+0

@Havenard我刚刚这样做。不幸的是,情况并非如此。我只是尝试插入多个记录,但没有提交事务。然后我在Data2中插入一条记录。数据已插入。 – Luke101

回答

0

修改查询WITH(NOLOCK) 使用此

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

这会工作。

0

如果您需要绝对肯定有变化插入过程中造成的数据,你可以使用TABLOCKX查询提示...

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

这会给你两个表,直到排它锁交易完成。

相关问题