我們計劃將應用程序從Sybase SQL Anywhere轉換爲SQL Server。現有更新中的SQLServer
在SA中,我們使用大量「on existing update」,通過主鍵檢查是否存在行。 如果爲true,則更新(如果我正在執行更新子句,則以同樣的方式)。 如果沒有,則插入。
SQL Server是否支持這樣的事情?
我們計劃將應用程序從Sybase SQL Anywhere轉換爲SQL Server。現有更新中的SQLServer
在SA中,我們使用大量「on existing update」,通過主鍵檢查是否存在行。 如果爲true,則更新(如果我正在執行更新子句,則以同樣的方式)。 如果沒有,則插入。
SQL Server是否支持這樣的事情?
AFAIK在一個命令中沒有對此的支持。我發現的最好方法是按照Jeremiah Clark's tip:嘗試更新,然後檢查受影響記錄的數量。如果是零,那麼我插入:
UPDATE Table1 SET (...) WHERE Column1='SomeValue'
IF @@ROWCOUNT=0
INSERT INTO Table1 VALUES (...)
SQL Server有一個高端的RDBMS,存儲過程,觸發器,UDF的所有功能等等......你可能知道MS SQL服務器被分支完全從Sybase出來,所以它們確實有共同之處。
我不確定我完全得到你的問題,當然你可以有一個SQL語句包含一些邏輯並根據一些條件進行INSERT或UPDATE,或者如果已經找到記錄,TSQL是SQL的SQL方言服務器並支持這一點以及更多。
如果您確實對某個聲明有具體疑問或疑問,請立即向我們提供您的聲明,因爲您現在已在SA中。
如果您將使用SQL Server 2008及更高版本,則可以使用MERGE命令。你可以在這裏找到描述:
http://technet.microsoft.com/en-us/library/bb510625(SQL.100).aspx
如果使用舊的SQL,耶利米克拉克的解決方案通過埃裏克·薩瑟建議都會好的。
是的,我們正在使用2008 R2。我會和我的團隊討論這個命令。謝謝。 – Zote
我正在尋找避免測試的方法。但如果它沒有,可能我會用這種方式。 – Zote