我们计划将应用程序从 Sybase SQL Anywhere 转换为 SQL Server。
在 SA,我们使用大量“现有更新”,通过主键检查行是否存在。如果为真,则为更新(如果我正在执行更新子句,则以相同的方式)。如果没有,它会插入。
SQL Server 是否支持这样的东西?
我们计划将应用程序从 Sybase SQL Anywhere 转换为 SQL Server。
在 SA,我们使用大量“现有更新”,通过主键检查行是否存在。如果为真,则为更新(如果我正在执行更新子句,则以相同的方式)。如果没有,它会插入。
SQL Server 是否支持这样的东西?
如果您将使用 SQL Server 2008 及更高版本,则可以使用 MERGE 命令。你可以在这里找到描述:
http://technet.microsoft.com/en-us/library/bb510625(SQL.100).aspx
如果您使用较旧的 SQL, Erick Sasse建议的Jeremiah Clark 的解决方案 就可以了。
AFAIK 在一个命令中不支持此功能。我发现最好的方法是遵循Jeremiah Clark 的提示:尝试更新,然后检查受影响记录的数量。如果它为零,那么我插入:
UPDATE Table1 SET (...) WHERE Column1='SomeValue'
IF @@ROWCOUNT=0
INSERT INTO Table1 VALUES (...)
SQL Server 具有高端 RDBMS、存储过程、触发器、UDF 等的所有功能……您可能知道 MS SQL Server 正是从 Sybase 分支出来的,因此它们确实有共同的根源。
我不确定我是否完全得到你的问题,当然你可以有一个包含一些逻辑的 SQL 语句,并根据某些条件或如果已经找到记录,则执行 INSERT 或 UPDATE,TSQL 是 SQL Server 的 SQL 方言并支持这一点以及更多。
如果您对声明确实有具体问题或疑问,请向我们展示您现在在 SA 中的声明。