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

时间:2012-09-27 12:19:58

标签: tsql sql-server-2005 merge

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

1 个答案:

答案 0 :(得分:26)

SQL Server 2008中引入了

MERGE。如果您想使用该语法,则需要升级。

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

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(以及Michael Swart demonstrated here)一样,您仍然希望使用正确的事务,错误处理和隔离级别来包围这些方法中的任何一个,以表现得像真正的单个操作。即使单个MERGE语句也不能保护您免受并发现象。

我发布了一些other cautions about MERGE in more detail here