2017-02-24 78 views
1

我遇到的情況,我在下面的方式更新約40000工作人員記錄:結合mupltiple更新語句

  1. 我要誰擁有1
  2. 作用-ID首次更新工
  3. 然後剩下的只有在上次更新中沒有更新的角色ID爲2,0,3的角色。

我的問題:有什麼辦法可以將所有4個結合到一個更新語句中嗎?

我擔心的是,我的生產服務器功能非常強大,並且可能會因爲我一次又一次地更新同一個表而導致死鎖。我們在其他地方有這個問題,我們必須替換用戶定義的功能。

下面是示例更新腳本:

UPDATE A 
SET Start_Office = B.TX_LCTN, 
    Start_Worker_ID = B.wrkr_id_prsn  
FROM #FinalRes A 
INNER JOIN #StartData B ON A.ID_CASE = B.ID_CASE  
         AND A.Case_Open_Date = B.Case_Open_Date 
WHERE B.CD_ROLE = 1 

UPDATE A 
SET Start_Office = B.TX_LCTN, 
    Start_Worker_ID = B.wrkr_id_prsn 
FROM #FinalRes A 
INNER JOIN #StartData B ON A.ID_CASE = B.ID_CASE 
         AND A.Case_Open_Date = B.Case_Open_Date 
WHERE A.Start_Worker_ID IS NULL 
    AND B.CD_ROLE = 2 

UPDATE A 
SET Start_Office = B.TX_LCTN, 
    Start_Worker_ID = B.wrkr_id_prsn 
FROM #FinalRes A 
INNER JOIN #StartData B ON A.ID_CASE = B.ID_CASE 
         AND A.Case_Open_Date = B.Case_Open_Date 
WHERE A.Start_Worker_ID IS NULL 
    AND B.CD_ROLE = 0 

UPDATE A 
SET Start_Office = B.TX_LCTN, 
    Start_Worker_ID = B.wrkr_id_prsn 
FROM #FinalRes A 
INNER JOIN #StartData B ON A.ID_CASE = B.ID_CASE 
         AND A.Case_Open_Date = B.Case_Open_Date 
WHERE A.Start_Worker_ID IS NULL 
    AND B.CD_ROLE = 3 
+1

請標記您的問題與您正在使用的數據庫。 –

回答

2

看起來你正在使用SQL Server。如果是這樣,apply可以幫助:

UPDATE fr 
    SET Start_Office = sd.TX_LCTN, 
     Start_Worker_ID = sd.wrkr_id_prsn  
    FROM #FinalRes fr APPLY 
     (SELECT TOP 1 sd.* 
      FROM #StartData sd 
      WHERE sd.ID_CASE = fr.ID_CASE AND 
       sd.Case_Open_Date = fr.Case_Open_Date 
      ORDER BY sd.CD_ROLE 
     ) sd 
+0

非常感謝 - 幫助。 – SQLDev