1

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

在 SA,我们使用大量“现有更新”,通过主键检查行是否存在。如果为真,则为更新(如果我正在执行更新子句,则以相同的方式)。如果没有,它会插入。

SQL Server 是否支持这样的东西?

4

3 回答 3

1

如果您将使用 SQL Server 2008 及更高版本,则可以使用 MERGE 命令。你可以在这里找到描述:

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

如果您使用较旧的 SQL, Erick Sasse建议的Jeremiah Clark 的解决方案 就可以了。

于 2011-08-04T12:37:03.393 回答
1

AFAIK 在一个命令中不支持此功能。我发现最好的方法是遵循Jeremiah Clark 的提示:尝试更新,然后检查受影响记录的数量。如果它为零,那么我插入:

UPDATE Table1 SET (...) WHERE Column1='SomeValue'
IF @@ROWCOUNT=0
    INSERT INTO Table1 VALUES (...)
于 2011-08-04T11:48:06.740 回答
0

SQL Server 具有高端 RDBMS、存储过程、触发器、UDF 等的所有功能……您可能知道 MS SQL Server 正是从 Sybase 分支出来的,因此它们确实有共同的根源。

我不确定我是否完全得到你的问题,当然你可以有一个包含一些逻辑的 SQL 语句,并根据某些条件或如果已经找到记录,则执行 INSERT 或 UPDATE,TSQL 是 SQL Server 的 SQL 方言并支持这一点以及更多。

如果您对声明确实有具体问题或疑问,请向我们展示您现在在 SA 中的声明。

于 2011-08-04T11:48:25.323 回答