12

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

4

1 回答 1

26

MERGE在 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(正如Michael Swart 在这里演示的那样)一样,您仍然希望用适当的事务、错误处理和隔离级别来包围这些方法中的任何一个,以使其表现得像一个真正的单一操作。即使是单个MERGE语句也不能保护您免受并发的影响。

我在此处此处更详细地发布了有关 MERGE 的其他一些注意事项。

于 2012-09-27T12:34:55.940 回答