【问题标题】:Can I use the MERGE statement in SQL Server 2005?我可以在 SQL Server 2005 中使用 MERGE 语句吗?
【发布时间】:2012-09-19 05:32:17
【问题描述】:

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

【问题讨论】:

  • 这是 2008 年引入的新功能。所以不,你不能在 2005 年写 MERGE。

标签: tsql sql-server-2005 merge


【解决方案1】:

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 语句也不能保护您免受并发的影响。

我已经更详细地发布了一些关于 MERGE 的其他警告here 和 here。

【讨论】:

  • 当然,对于一些奇特的设置,可能无法用单独的 INSERT/UPDATE/DELETE 语句替换 MERGE。
  • @AaronBertrand - One example I can think of
  • @VikrantMore 不,您不能对数据库引擎进行更改。这样做的方法称为升级。
  • @VikrantMore 不,您不能在任何版本的 SQL Server 中创建自己的关键字,抱歉。也许您将 SQL Server 误认为是开源数据库平台之一?
  • @VikrantMore:您可以在 Postgres 和 MySQL 等开源 DBMS 中执行此类操作(添加函数、子句、语句)。不在 SQL-Server 或 Oracle 中。
猜你喜欢
  • 2020-10-13
  • 1970-01-01
  • 2010-09-20
  • 1970-01-01
  • 1970-01-01
  • 2012-06-28
  • 2013-02-01
  • 2022-10-04
  • 2021-02-14
相关资源
最近更新 更多