SQLServer上的现有更新

时间:2011-08-04 11:38:50

标签: sql-server database migration sqlanywhere

我们计划将应用程序从Sybase SQL Anywhere转换为SQL Server。

在SA,我们使用了很多“现有更新”,如果存在行,则按主键检查。 如果为true,则更新(以同样的方式执行update子句)。 如果没有,则插入。

SQL Server是否支持这样的内容?

3 个答案:

答案 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中的陈述。