2013-03-26 61 views
0

我正在使用sql server 2012並擁有一個數據庫。在sql表之間複製數據

在這個數據庫中,我有2個表格。 1表後端到實時數據。另一個是完全相同的結構,但是一個臨時表 - 沒有實時系統處理它。

我想編寫一個sql查詢以包含在對臨時表運行的存儲過程/ sql作業中,並將數據更新/插入到實時表中。如果記錄存在於實時表中,則更新它,如果沒有插入。由於臨時表每天需要運行時可能有100,000個 - 我擔心性能,特別是實時表被鎖定的可能性。在查詢運行時,實時表可能會從另一個源更新,因此可能需要鎖定行級。

我已經概述了這個過程和我的關注點,所以我希望在編寫查詢時提供幫助。我不需要影響實時表的性能,但是當數據傳輸時不確定其他系統是否更新每行的行。我怎麼能用sql做到這一點?

回答

1

你想合併:

merge into Emp2 as Target 
    using emp as Source on Target.FirstName=Source.Firstname and Target.LastName=Source.lastName 
    when matched then 
     update set Target.FirstName=Source.FirstName, 
         Target.LastName = Source.LastName 
    when not matched then 
     insert (FirstName,LastName, LastTraining) values (Source.FirstName,Source.LastName,Source.LastTraining); 
+1

合併是正確的答案。沒有什麼會更快,更重要的是,沒有什麼是更正確的。不要擔心鎖定;鎖管理是服務器的工作。專注於你的鑰匙。確保您可以在主鍵上加入表,並且PK使用聚集索引。 – 2013-03-26 01:29:00