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
