update關聯其他表批量更新數據-跨數據庫-跨服務器Update時關聯表條件更新


1.有時在做項目時會有些期初數據更新,從老系統更新到新系統。如果用程序循環從老系統付給新系統。

2.有時在項目中需要同步程序,或者自動同步程序時會有大量數據更新就可能用到如下方法了。

3.為了做分析,需要整合一些數據到一個表中,涉及到通過主鍵關聯多個表,獲取其中的某些字段的值,通過update可以簡單實現,找了一篇文章,挺不錯:

    批量更新表時,update一個表的列時,需要依賴另外的表,這種依賴可以是where條件子句,也可以要update的field的值依賴另外的表
通常有兩種做法
   1.使用存儲過程
   2.在程序代碼里逐條循環執行
 3.有一種更高效、簡潔的做法,批量更新SQL ,一句SQL就可以替代麻煩的循環過程,有MS SQLServer、Oracle、DB2下的寫法

UPDATE kcm02 
SET kcjhcb = V_U8_Inventory.iInvRCost,kccbhs = V_U8_Inventory.cValueType
FROM  V_U8_Inventory 
WHERE V_U8_Inventory.cInvCode = kcm02.kcwpdm

 另如果需要跨庫跨服務器更新的時候用如下語法:跨庫設置參照:http://www.cnblogs.com/spring_wang/p/3370750.html

update kcm02 
set kcjhcb = Inventory.kcjhcb,kccbhs = Inventory.kccbhs
 from  OPENDATASOURCE ('SQLOLEDB', 
                      'Data Source=192.168.1.3; 
                          USER ID = sa ;Password=123' ).yzerp.dbo.kcm02 as Inventory 
where Inventory.kcwpdm = kcm02.kcwpdm 

 

 

--其它參考如下----------------------------------------------------
--關鍵點:t4和t1是同一個table,primary key肯定也是同一個,
--並以它進行關聯,這樣在 select語句里即可引用到要update的表的fields 
UPDATE Table1 AS t1 
SET (Field1,Field2) = (SELECT Field21, Field22 
                       FROM Table2 t2 
                            INNER JOIN Table3 t3 
                                 ON t3.Field31 = t2.Field23 
                            INNER JOIN Table4 t4 
                                 ON t3.Field32 = t4.Filed41 
                       WHERE t2.Field24 >= '' 
                                      AND t1.fId = t4.fId); 
----------------------------MS SQLServer --------------------------------------

UPDATE t1 
SET Field1 = Field21, Field2 = Field22 
FROM Table2 t2 
         INNER JOIN Table3 t3 
              ON t3.Field31 = t2.Field23 
         INNER JOIN Table4 t4 
              ON t3.Field32 = t4.Filed41 
WHERE ((t2.Field24 >= '') 
                  AND t1.fId = t4.fId); 
----------------------------Oracle --------------------------------------------

UPDATE Table1 t1 
SET (Field1,Field2) = (SELECT Field21, Field22 
                       FROM Table2 t2 
                            INNER JOIN Table3 t3 
                                 ON t3.Field31 = t2.Field23 
                            INNER JOIN Table4 t4 
                                 ON t3.Field32 = t4.Filed41 
                       WHERE ((t2.Field24 >= '') 
                                 AND t1.fId = t4.fId)) 
WHERE EXISTS (SELECT Field21, Field22 
              FROM Table2 t2 
                   INNER JOIN Table3 t3 
                        ON t3.Field31 = t2.Field23 
                   INNER JOIN Table4 t4 
                        ON t3.Field32 = t4.Filed41 
              WHERE ((t2.Field24 >= '') 
                               AND t1.fId = t4.fId)); 
---------------------------------DB2 ------------------------------------------

UPDATE Table1 AS t1 
SET (Field1,Field2) = (SELECT Field21, Field22 
                       FROM Table2 t2 
                            INNER JOIN Table3 t3 
                                 ON t3.Field31 = t2.Field23 
                            INNER JOIN Table4 t4 
                                 ON t3.Field32 = t4.Filed41 
                       WHERE ((t2.Field24 >= '') 
                                         AND t1.fId = t4.fId)) 
WHERE EXISTS (SELECT Field21, Field22 
              FROM Table2 t2 
                   INNER JOIN Table3 t3 
                        ON t3.Field31 = t2.Field23 
                   INNER JOIN Table4 t4 
                        ON t3.Field32 = t4.Filed41 
              WHERE ((t2.Field24 >= '') 
                                AND t1.fId = t4.fId));

 

作者:王春天 2013.11.12  地址:http://www.cnblogs.com/spring_wang/p/3418903.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM