只是Scenarion,也許它可以幫助你瞭解什麼gordatron和我談論:
以下情況: 有一個表「產品」至極是產品信息 和中央存儲的地方一個表「UpdatedProducts」,其結構看起來與「Products」表完全一樣,但數據 可能不同。想想下面的情景:你在早上將產品表導出爲excel。整個 一天您刪除,添加,更新您的Excel表中的產品。在一天結束時,您想重新導入您的excel 數據到「產品」表。你需要什麼:
- 從 「UpdatedProducts」 從Excel
- 插入數據 「UpdatedProducts」(批量插入如果可能的話)
- 更新的 「產品」 表中刪除所有記錄
然後合併聲明可能看起來像這樣:
MERGE Products AS TARGET
USING UpdatedProducts AS SOURCE
ON TARGET.ProductID = SOURCE.ProductID
WHEN MATCHED AND TARGET.ProductName <> SOURCE.ProductName OR TARGET.Rate <> SOURCE.Rate
THEN UPDATE SET TARGET.ProductName = SOURCE.ProductName,
TARGET.Rate = SOURCE.Rate
WHEN NOT MATCHED BY TARGET
THEN INSERT (ProductID, ProductName, Rate)
VALUES (SOURCE.ProductID, SOURCE.ProductName, SOURCE.Rate)
WHEN NOT MATCHED BY SOURCE
THEN DELETE
什麼本聲明: WHEN MATCHED:兩個表中 數據存在,我們在「產品展示」更新數據,如果產品名稱或速率是不同的
WHEN NOT MATCHED BY TARGET: 數據在臨時表存在,但不是在你的原來的表,我們將它們添加到「產品」
WHEN NOT MATCHED BY SOURCE: 數據存在於你的原始表而不是在臨時表中,你將被從「產品」刪除
由於很多http://www.mssqltips.com/sqlservertip/1704/using-merge-in-sql-server-to-insert-update-and-delete-at-the-same-time/爲這個完美的例子!
您可以上傳到臨時表,然後更新數據庫中的更改嗎? - 抱歉,不是100%確定性能瓶頸在哪裏。 excel讀取行?插入到數據庫或檢查哪些行已經改變(如果是這樣做 - 是否在客戶端應用程序中的數據表之間?) – gordatron
這些問題不需要回答..他們只是在那裏解釋我的建議;) – gordatron
已更新從什麼時候開始? – artm