2011-08-04 75 views
1

我們計劃將應用程序從Sybase SQL Anywhere轉換爲SQL Server。現有更新中的SQLServer

在SA中,我們使用大量「on existing update」,通過主鍵檢查是否存在行。 如果爲true,則更新(如果我正在執行更新子句,則以同樣的方式)。 如果沒有,則插入。

SQL Server是否支持這樣的事情?

回答

1

AFAIK在一個命令中沒有對此的支持。我發現的最好方法是按照Jeremiah Clark's tip:嘗試更新,然後檢查受影響記錄的數量。如果是零,那麼我插入:

UPDATE Table1 SET (...) WHERE Column1='SomeValue' 
IF @@ROWCOUNT=0 
    INSERT INTO Table1 VALUES (...) 
+0

我正在尋找避免測試的方法。但如果它沒有,可能我會用這種方式。 – Zote

0

SQL Server有一個高端的RDBMS,存儲過程,觸發器,UDF的所有功能等等......你可能知道MS SQL服務器被分支完全從Sybase出來,所以它們確實有共同之處。

我不確定我完全得到你的問題,當然你可以有一個SQL語句包含一些邏輯並根據一些條件進行INSERT或UPDATE,或者如果已經找到記錄,TSQL是SQL的SQL方言服務器並支持這一點以及更多。

如果您確實對某個聲明有具體疑問或疑問,請立即向我們提供您的聲明,因爲您現在已在SA中。

+0

在現有更新值(1,'ABC',123)上插入TableA(id,value1,value2); – Zote

+0

如果TableA具有id(pk)等於1的行,它將更新。如果沒有,它會插入。 – Zote

+0

FYI SQL Server從Sybase __ASE__分支。 Sybase SQL Anywhere是與ASE沒有共同代碼的完全不同的RDBMS。 –

1

如果您將使用SQL Server 2008及更高版本,則可以使用MERGE命令。你可以在這裏找到描述:

http://technet.microsoft.com/en-us/library/bb510625(SQL.100).aspx

如果使用舊的SQL,耶利米克拉克的解決方案通過埃裏克·薩瑟建議都會好的。

+0

是的,我們正在使用2008 R2。我會和我的團隊討論這個命令。謝謝。 – Zote