【发布时间】:2012-09-19 05:32:17
【问题描述】:
我正在使用 SQL Server 2005,我想在 SQL Server 2005 的单个查询中创建 MERGE 语句或概念。可以吗?
【问题讨论】:
-
这是 2008 年引入的新功能。所以不,你不能在 2005 年写
MERGE。
标签: tsql sql-server-2005 merge
我正在使用 SQL Server 2005,我想在 SQL Server 2005 的单个查询中创建 MERGE 语句或概念。可以吗?
【问题讨论】:
MERGE。
标签: tsql sql-server-2005 merge
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 demonstrated here)一样,您仍然希望使用适当的事务、错误处理和隔离级别来包围这些方法中的任何一个,以使其表现得像一个真正的单一操作。即使是单个 MERGE 语句也不能保护您免受并发的影响。
【讨论】:
INSERT/UPDATE/DELETE 语句替换 MERGE。