Tsql 我可以在SQLServer2005中使用MERGE语句吗?

Tsql 我可以在SQLServer2005中使用MERGE语句吗?,tsql,sql-server-2005,merge,Tsql,Sql Server 2005,Merge,我正在使用SQLServer2005,我想在SQLServer2005的单个查询中创建合并语句或概念。有可能吗?是在SQL Server 2008中引入的。如果要使用该语法,则需要升级 否则,典型的方法将取决于源数据的来源。如果只是一行,您不知道是否需要更新或插入,您可能会: UPDATE ... WHERE key = @key; IF @@ROWCOUNT = 0 BEGIN INSERT ... END 如果源是#temp表、表变量、TVP或其他表,则可以执行以下操作: UPD

我正在使用SQLServer2005,我想在SQLServer2005的单个查询中创建合并语句或概念。有可能吗?

是在SQL Server 2008中引入的。如果要使用该语法,则需要升级

否则,典型的方法将取决于源数据的来源。如果只是一行,您不知道是否需要更新或插入,您可能会:

UPDATE ... WHERE key = @key;

IF @@ROWCOUNT = 0
BEGIN
    INSERT ...
END
如果源是#temp表、表变量、TVP或其他表,则可以执行以下操作:

UPDATE dest SET ...
  FROM dbo.destination AS dest
  INNER JOIN dbo.source AS src
  ON dest.key = src.key;

INSERT dbo.destination SELECT ... FROM dbo.source AS src
  WHERE NOT EXISTS (SELECT 1 FROM dbo.destination WHERE key = src.key);
MERGE
(和As)一样,您仍然希望使用适当的事务、错误处理和隔离级别来围绕这些方法中的任何一种,使其表现得像一个真正的单一操作。即使是一个
MERGE
语句也不能保护您免受并发性的影响


我已经发布了一些。

这是2008年推出的一项新功能。因此,不,您不能在2005年编写
合并
。当然,对于某些特殊设置,可能无法用单独的
插入
/
更新
/
删除
语句替换
合并
。@AaronBertrand-@VikrantMore不,您不能更改数据库引擎。这样做的方法称为升级。@VikrantMore不,对不起,您不能在任何版本的SQL Server中创建自己的关键字。也许你把SQL Server误认为是开源数据库平台之一?@VikrantMore:你可以在开源数据库管理系统中做这类事情(添加函数、子句、语句),比如Postgres和MySQL。不在SQL Server或Oracle中。