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