Sql-Server

SQL 導入以更新現有記錄?

  • May 12, 2017

我在數據庫中有一個表,其中包含每月更新的項目成本。為了更新這些成本,我們有人導出表,在 excel 中做一些魔術,然後將表導入回數據庫。我們正在執行 MSSQL 2005 並使用內置的 SQL Management Studio。問題是當導入回表時,我們必須在導入之前刪除所有記錄,否則會出錯。理想的情況是導入辨識主鍵,然後更新記錄,而不是嘗試使用重複鍵創建第二條記錄——停止導入。可以在http://sqlmanager.net/en/products/mssql/dataimport/documentation/hs2180.html找到我們試圖獲得的行為的最佳說明更新或插入範例。使用內置工具可以實現這樣的事情,還是我們必須讓第三方軟體才能實現?

在 SQL Server 2008 中,您可以將數據放入新表並使用 MERGE 語句,將現有表作為目標,將新表作為源。

相反,您可能更願意將其放入一個新表中,並使用舊方法將其用作您的源(不幸的是使用了兩個步驟):

UPDATE t SET col1 = s.col1, col2 = s.col2
FROM targetTable t
  JOIN
  newTable s
   ON s.id = t.id ;

INSERT targetTable (columnlist)
SELECT s.col1, s.col2, ...
FROM sourceTable s
  LEFT JOIN
  targetTable t
   ON s.id = t.id 
WHERE t.id IS NULL;

請記住,如果您也嘗試插入標識列,則可能需要在目標表上打開 IDENTITY_INSERT。

引用自:https://serverfault.com/questions/101593