2014-11-25 74 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