2009-08-02 54 views
0

我對你有專家MSSQL存儲過程的問題:的Sql存在副本

我有兩個表[表1]它檢索新條目,將全部的時間。然後我有另一個表[table2],我需要將[table1]的內容複製到。

我需要檢查一些行是否已經存在於[table2]中,如果是這樣,只需更新[table2]的Update-timestamp,否則將其插入到[table2]中。

表格可能比較大,大約有100k個條目,所以哪個是最快的方法呢?

應該注意,這是一個簡化的想法,因爲從[Table1] - > [Table2]複製新內容時會發生更多的數據處理。

總結: 如果存在一行,[Table1]和[Table2]兩者都會更新[Table2]中該行的時間戳,否則只需將一個新的記錄插入到[Table1]中。

+0

你從哪裏得到這些標籤? – gbn 2009-08-02 08:21:26

+0

對不起,標籤? – Dofs 2009-08-02 08:22:10

+0

「mssql」和「storedprocedure」 – gbn 2009-08-02 08:23:58

回答

1

這適用於所有版本的SQL Server。 MERGE在SQL Server 2008中也是如此。

UPDATE 
    table2 
SET 
    timestampcolumn = whatever 
WHERE 
    EXISTS (SELECT * 
     FROM table1 
     WHERE 
      table1.key = table2.key) 


INSERT table2 (col1, col2, col3...) 
SELECT col1, col2, col3... 
FROM table1 
WHERE 
    NOT EXISTS (SELECT * 
     FROM table2 
     WHERE 
      table2.key = table1.key) 
2

如果您有SQL Server 2008,它有一個MERGE命令,可以根據需要進行插入或更新。

0

鑑於這聽起來像一個ETL過程。你有沒有考慮過使用SQL Server Integration Services

如果您正在計劃導出/加載/處理數據丟失,那麼這是我認爲的方式。您還具有能夠並行運行多個線程以及更多選項來調整數據吞吐量和服務器內存利用率等優勢。