我正在使用 SQL Server 2005,我想在 SQL Server 2005 中的单个查询中创建 MERGE 语句或概念。这可能吗?
MERGE http://technet.microsoft.com/en-us/library/bb510625(v=sql.100).aspx是在 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);
As with MERGE
(并作为迈克尔·斯沃特 (Michael Swart) 在此演示 http://michaeljswart.com/2011/09/mythbusting-concurrent-updateinsert-solutions/),您仍然希望使用适当的事务、错误处理和隔离级别来包围这些方法中的任何一个,以使其表现得像真正的单一操作。即使是单个MERGE
声明不能保护您免受并发性的影响。
我更详细地发布了有关 MERGE 的其他一些注意事项here http://www.mssqltips.com/sqlservertip/3074/tip-on-using-caution-with-merge/?utm_source=AaronBertrand and here https://sqlblog.org/merge.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)