我可以在SQL Server 2005中使用MERGE语句吗?

Vik*_*ore 12 t-sql merge sql-server-2005

我正在使用SQL Server 2005,我想在SQL Server 2005中的单个查询中创建MERGE语句或概念.是否可能?

Aar*_*and 26

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

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

UPDATE ... WHERE key = @key;

IF @@ROWCOUNT = 0
BEGIN
    INSERT ...
END
Run Code Online (Sandbox Code Playgroud)

如果您的源是#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);
Run Code Online (Sandbox Code Playgroud)

正如MERGE(和Michael Swart在此演示)一样,您仍然希望使用正确的事务,错误处理和隔离级别来包围这些方法中的任何一个,以表现得像真正的单个操作.即使是单个MERGE语句也不能保护您免受并发影响.

在这里更详细地发表了关于MERGE的其他一些注意事项.

  • @VikrantMore不,你不能对数据库引擎进行更改.这样做的方法称为升级. (4认同)
  • @VikrantMore:您可以在开源DBMS中执行此类操作(添加函数,子句,语句),如Postgres和MySQL.不在SQL-Server或Oracle中. (2认同)