我的任務是同步2個表格(兩者完全相同)。他們每個有60列。表A是最初將填寫的主表。我需要創建一個存儲過程(完成),它將合併這兩個表,並在調用時填充相同的確切數據(更新,插入,刪除)。我如何使用SQL中的MERGE函數來實現這一點?我已經查看了MSDN文檔以及technet上的類似文檔,但是我對入門感到困惑。我是否需要指定我需要合併的每個字段?或者這是一個簡單的電話,我錯過了將執行此操作?使用MERGE同步2個表格
回答
這裏是MERGE語句的一個簡單的例子鏈接:
http://www.simple-talk.com/sql/learn-sql-server/the-merge-statement-in-sql-server-2008/
的基本語法讀作:
MERGE table1
USING table2
ON table1.id = table2.id
WHEN MATCHED THEN
--Do an update here
WHEN NOT MATCHED BY TARGET THEN
--Do an insert here (or a delete)
;
您還可以使用WHEN NOT MATCHED BY SOURCE
謝謝,我來看看。 – devHead 2013-02-13 18:20:11
這有助於完成我的任務!不僅幫助減少了超過1小時的同步時間,而且還減少了我使用的最後一種方法! – devHead 2013-02-14 15:49:37
@Don Great,很高興它爲你工作:) – twoleggedhorse 2013-02-14 16:39:12
超過60列是一個偉大的數字!當我需要同步2個相同的表我做:
;WITH tbl_to_synch as (
-- Prepare table to update,
Select *,chk = CHECKSUM(*) from [dbo].[tableA]
)
MERGE tbl_to_synch as [Target]
USING (Select *,chk = CHECKSUM(*) from [dbo].[tableB]) as [source]
ON [Target].key = [source].key
WHEN MATCHED AND [Target].chk <> [source].chk THEN
-- UPDATE ONLY row that is changed
UPDATE
SET
column01 = [source].[column01]
,column02 = [source].[column01]
-- ....
,column59 = [source].[column59]
,column60 = [source].[column59]
WHEN NOT MATCHED BY TARGET THEN
insert (column01, column02, ...,column59,column60)
values (column01, column02, ...,column59,column60)
WHEN NOT MATCHED BY SOURCE THEN DELETE
-- Show what is changed
OUTPUT $action, ISNULL(INSERTED.key,DELETED.key);
喜歡使用CTE來定義目標表。 MERGE語句的速度可以得到巨大的提升,這些語句如果沒有按照源進行匹配。欲瞭解更多信息,請參閱我的答案在https://stackoverflow.com/questions/7626719/sql-server-delete-and-merge-performance/41295187#41295187 – 2017-07-14 05:27:12
- 1. 同步2列表
- 2. 嚴格的使用2個信號燈的N進程同步
- 3. 同步。 2個數據庫表正確
- 4. 在sql server中同步2個表
- 5. 使用Oracle在同一個表MERGE根據病情
- 6. jQuery同步表格寬度在2表之間
- 7. 使用Microsoft同步框架將兩個表同步到一個讀取表中
- 8. 使用來自2個不同表格的字段創建表格
- 9. 更改表格字段使用2個不同的模型
- 10. HTML:如何使用不同的CSS製作2個表格
- 11. Java - 如何同步2列表上的2個線程?
- 12. 乘以2個不同表格的值
- 13. Angular 2同步API調用
- 14. 同步2個不同數據庫的表 - MySQL
- 15. 試圖「同步」2個HTML表(應用列寬)
- 16. mysql:連接2個表格與2個不同的字段
- 17. php/merge 2.csv文件到一個
- 18. 與虛擬使用表格的MERGE的缺點?
- 19. 如何使用merge()更新R中的表格
- 20. 使用python跨越單獨的數據庫的MySQL MERGE表格
- 21. 以不同的日期格式使用proc來連接2個表格
- 22. 保持2代表的設計同步
- 23. SQL Server 2表同步遞歸
- 24. 在Sql Server中使用MERGE與相同的源/目標表
- 25. 如何使用Phabricator Diffusion同步2個遙控器
- 26. 同步框架2.0同步數據庫中的所有表格
- 27. git-svn merge 2 svn分支
- 28. 使用2個表
- 29. 同步同步列表
- 30. 使用GoogleDocs電子表格進行Web SQL同步?
正確,我想同步兩個表...我的研究看起來像MERGE是我想要使用。我可能是錯的,我只是沒有看到任何包含超過60列的表的例子。我只是總體混淆從哪裏開始...我是一個C#開發人員走出我的舒適區... – devHead 2013-02-13 18:01:26
@Sarel:如果你願意,你可以刪除評論;) – 2013-02-13 18:03:11