Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 现有更新上的SQLServer_Sql Server_Database_Migration_Sqlanywhere - Fatal编程技术网

Sql server 现有更新上的SQLServer

Sql server 现有更新上的SQLServer,sql-server,database,migration,sqlanywhere,Sql Server,Database,Migration,Sqlanywhere,我们计划将一个应用程序从Sybase SQL Anywhere转换为SQL Server 在SA中,我们使用了大量的“现有更新”,即通过主键检查行是否存在。 如果为true,则为update(和我执行update子句时的方式相同)。 如果没有,则插入 SQL Server是否支持类似的功能?AFAIK一个命令不支持这种功能。我发现最好的方法是:尝试更新,然后检查受影响记录的数量。如果为零,则我插入: UPDATE Table1 SET (...) WHERE Column1='SomeValue

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

在SA中,我们使用了大量的“现有更新”,即通过主键检查行是否存在。 如果为true,则为update(和我执行update子句时的方式相同)。 如果没有,则插入


SQL Server是否支持类似的功能?

AFAIK一个命令不支持这种功能。我发现最好的方法是:尝试更新,然后检查受影响记录的数量。如果为零,则我插入:

UPDATE Table1 SET (...) WHERE Column1='SomeValue'
IF @@ROWCOUNT=0
    INSERT INTO Table1 VALUES (...)

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

我不确定我是否完全理解您的问题,当然,您可以有一个SQL语句,它包含一些逻辑,并根据某些条件进行插入或更新,或者如果已经找到记录,那么TSQL是SQL Server的SQL方言,支持这一点以及更多


如果您确实对某条语句有特定问题或疑问,请向我们展示您目前在SA中的语句。

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


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

我正在寻找一种避免测试的方法。但如果它没有,我可能会用这种方式。是的,我们使用的是2008 R2。我会和我的团队讨论这个命令。谢谢。将现有更新值(1,'ABC',123)插入表A(id,值1,值2);如果TableA有一行id(pk)等于1,它将更新。否则,它将插入。仅供参考,SQL Server是从Sybase ASE分支而来的。Sybase SQL Anywhere是一种完全不同的RDBMS,它没有与ASE相同的代码。