Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何保证在同一事务中将所有数据插入表中?_Sql_Sql Server_Sql Server 2014 - Fatal编程技术网

Sql 如何保证在同一事务中将所有数据插入表中?

Sql 如何保证在同一事务中将所有数据插入表中?,sql,sql-server,sql-server-2014,Sql,Sql Server,Sql Server 2014,我有一个insert查询,如下所示: INSERT INTO Data1 (column1, column2) SELECT column1, column2 FROM Data2 此查询大约需要30秒。在这30秒内,当查询仍在运行时,可能会有人插入、删除或修改Data2表中的数据。如何防止这种情况发生或在同一事务中包含更改?使用(NOLOCK)修改您的查询 用这个 这将起作用。如果您需要绝对确定在插入过程中进行了数据更改,您可以使用TABLOCKX查询提示 INSERT INTO Data1

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

INSERT INTO Data1 (column1, column2)
SELECT column1, column2 FROM Data2
此查询大约需要30秒。在这30秒内,当查询仍在运行时,可能会有人插入、删除或修改Data2表中的数据。如何防止这种情况发生或在同一事务中包含更改?

使用(NOLOCK)修改您的查询 用这个


这将起作用。

如果您需要绝对确定在插入过程中进行了数据更改,您可以使用TABLOCKX查询提示

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

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

单个事务中应该有一个insert语句。我相信,当一个表被修改时,它具有对该表的独占访问权限,所有其他请求都将排队,直到该
insert
完成。也许你想做多个查询,在这种情况下,你回答了你自己的问题,使用事务。@Havenard我刚刚演示了这个。不幸的是,情况并非如此。我只是尝试插入多个记录,但没有提交事务。然后我在数据2中插入了一条记录。数据已插入。可能与的重复
INSERT INTO Data1 WITH (TABLOCKX) (column1, column2)
SELECT column1, column2 FROM Data2 WITH (TABLOCKX);