我有一個DTS包計劃,將文件ODBC數據同步到我的SQL數據庫。它將數據存儲到臨時表中,然後處理信息。它一直以INSERT方式運行,而不是在運行,但現在將其更改爲更新已更改的行。您可以幫助您制定一個策略來刪除已更改的記錄,以便重新插入行或更新行。我嘗試在SELECT * FROM中包裝EXCEPT,但查詢運行了30多秒,EXCEPT本身需要MS。 DELETE FROM除了對EXCEPT工作嗎?有30多列,所以如果我可以刪除並重新插入,寫出更新看起來很長。SQL除了和更新數據
CI =臨時表,CI_Item =目標存儲表。 CI可能具有不存在於CI_Item表中的新行。
這爲我提供了一個結果集的數據進行更新
SELECT * FROM CI WHERE ItemCode IN (SELECT ItemCode FROM CI_Item)
EXCEPT
SELECT * FROM CI_Item
這是我目前簡單的插入常規
PRINT 'Updating CI Item Table...'
INSERT INTO CI_Item
SELECT * FROM CI
WHERE ItemCode NOT IN(SELECT ItemCode FROM CI_Item)
SET @RecordCount = @@ROWCOUNT
DELETE FROM CI
PRINT 'Updated CI Item Table (' + cast(@RecordCount as varchar) + ' records)'
你看過['MERGE'](https://msdn.microsoft.com/en-us/library/bb510625.aspx)語句嗎?提示:使用合適的軟件(MySQL,Oracle,DB2,...)和版本(例如, '的SQL服務器2014'。語法和功能的差異往往會影響答案。 – HABO
是的,它被標記爲sql-server,它表示所有版本;)我使用2008(100),但是這個數據庫是2000(80)兼容性。如果我能夠開始,我可以處理語法變體。我確實考慮過合併,但是SO的反饋並不積極。 – AdamRoof