2017-02-24 149 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