2014-11-25 57 views
0

我试图将table1数据有3000000行到table2。执行多个插入查询说,表锁定

表行是根据行号移动的,所以我执行三个并发的Insert into查询,通过将行分成1000000个每个记录,每个查询根据行号在哪里条件。

我的目标表是table2,source是所有3个查询的table1。

现在的问题是,当我执行3个查询时,第一个正在运行,而其他两个查询出现错误状态表被阻止。

请帮我一下我做错了什么,我该如何同时执行三个查询!!!!!

回答

0

由于行数很大,因此必须锁定升级,并且一个会话在表上获得排它锁,而其他会话被拒绝访问。你可以试试这个 -

USE MASTER; 
    ALTER DATABASE <yourDB>; 
    SET ALLOW_SNAPSHOT_ISOLATION ON; 
    GO 

    USE <yourDB>; 
    SET TRANSACTION ISOLATION LEVEL SNAPSHOT; 
    GO 

    <your SQL here> 

这将允许你在不锁定的情况下针对同一个表运行多个更新语句。

+0

它也可能会将性能从他的tempdb中删除;) – TomTom 2014-11-25 09:15:28

+0

正确。但他想同时插入同一张表:) – Raj 2014-11-25 09:21:02

+1

他也可以将三个连接结合起来使用同一个事务;)不那么难;) – TomTom 2014-11-25 09:23:19