我们计划将应用程序从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