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

2024-03-15

我正在使用 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(使用前将#替换为@)

我可以在 SQL Server 2005 中使用 MERGE 语句吗? 的相关文章

  • 如何从 T-SQL 中的“/”分隔字符串中获取几乎最后一个子字符串?

    如果我有一个由用 字符分隔的其他字符串 xxx xxx xxx xxxx 组成的字符串 如何使用 t sql 获取最后一个和几乎最后一个 最后一个之前的 部分 它可能应该是 charindex 和 right 的某种组合 declare s
  • Web.config 身份验证错误

    我使用的是SQLServer2005和VS2008 我在 web config 中的连接字符串是 add name library connectionString Data source KMT Initial Catalog Libra
  • 使用C#在SQL Server上执行sql文件

    我有很多程序 视图 函数等文件 我想在 SQL Server 2005 2008 上的适当数据库中执行这些文件 创建组件 还有一点是我想使用 C 来执行它们 另一点需要提及的是 我希望应用程序也可以在远程 SQL Server 上执行此文件
  • 为什么 T-SQL 块即使不应该执行也会给出错误?

    我正在编写一个 看似 直接的 SQL 片段 它在确保列存在后删除该列 问题 如果该列不存在 则代码insideIF 子句抱怨它找不到该列 出色地 doh 这就是为什么它位于 IF 子句内 所以我的问题是 为什么一段不应该执行的代码会出错 这
  • 在重复键上仅更新 Null 或空值

    我有一个 mysql 查询来合并主键 IMO 上的两个表 查询工作正常 但我遇到的问题是在重复键更新时 我只想更新 wp second 表的那些没有值的字段 简而言之 在重复键上 wp second 值仅应在 null 或空时更新 这是我到
  • 在SQL Server中,not(columnName='value')和columnName<>'value'之间有什么区别吗?

    在 SQL Server 的 where 子句中 无论您编写代码有什么区别not columnName value or columnName lt gt value 我正在考虑性能方面的问题 有人告诉我 当使用 Not 时 它可能不会使用
  • 在 SQL where 子句中使用带有 IsDate 的 case 语句

    我正在尝试清理以下代码中的 where 子句语句 SELECT CONVERT datetime UTC Time Stamp 127 AS TimeStamp FROM Table WHERE CASE WHEN ISDATE UTC T
  • 搜索并替换字符串 t-SQL

    每个人我都试图编写一个查询来替换末尾出现的所有字符串 我有一些干扰词 确切地说是 104 个 如果它们出现在字符串末尾 则需要将其从字符串中删除 例如 两个干扰词是 Company LLC 以下是一些示例和预期输出 American Com
  • 基于现有数据库表创建@TableVariable?

    我想在存储过程中使用表变量 但这是一个问题 我的表非常大 声明表变量也需要很长的代码来编写和调试 请告诉我一些快速声明表变量的方法 是否可以基于现有表创建表变量 或者请分享任何创建用于创建表变量的代码的提示 Thanks 右键单击表格 选择
  • R模糊字符串匹配根据匹配的字符串返回特定列

    我有两个大型数据集 一个大约有 50 万条记录 另一个大约有 7 万条记录 这些数据集有地址 我想匹配较小数据集中的任何地址是否存在于大数据集中 正如您所想象的那样 地址可以用不同的方式和不同的情况 拼写等来书写 此外 如果只写到建筑物级别
  • 如何查询最近7天的总计?

    我正在使用 SQL Server 2008 我想编写一个查询来提供给定天数的总活动量 具体来说 我想统计过去 7 天每天的总票数 我的桌子看起来像这样 VoteID VoteDate Vote BikeID 1 2012 01 01 08
  • 将每月数据分解为每日数据

    我有一家公司的预算数据 采用以下每月格式 SqlFiddle 链接在这里 http sqlfiddle com 3 09263 1 Dept YearMonth Budget 001 201301 100 001 201302 110 00
  • 循环遍历服务器上的数据库,并更新数据

    我有一台带有多个数据库的服务器 我需要循环访问这些数据库并更改每个数据库中的一个记录 一个表中的值 如何才能做到这一点 EXEC sp MSForEachDB Use UPDATE dbo MyTable SET MyValue 999
  • 出错时退出并回滚脚本中的所有内容

    我有一个 TSQL 脚本 它可以进行大量数据库结构调整 但在出现故障时让它继续执行并不真正安全 把事情说清楚 使用 MS SQL 2005 它不是一个存储过程 只是一个脚本文件 sql 我所拥有的按以下顺序排列 BEGIN TRANSACT
  • 如何返回以列名作为第一行的 T-SQL 查询

    我正在编写一个 SSIS 包来将数据从 SQL Server 2012 数据库输出到 CSV为客户归档 要求是第一行是列名称 下面是我为数据流任务中的源编写的查询 问题是 它总是将列名返回为最后一行 而不是第一行 为什么 我该如何实现这一目
  • 如何在sql中查询xml列

    我在 SQL Server 2008 上有一个表 T1 其中包含一个 XML 列 EventXML 我想查询某个节点包含特定值的所有行 更好的是 我想检索不同节点中的值 表T1 T1 EventID int EventTime dateti
  • 将插入与 select 语句合并

    这对我有用 MERGE Table1 AS tgt USING SELECT TOP 1 FROM Table2 SELECT itmid FROM Table3 WHERE id id as a WHERE id id AS src ON
  • 区分大小写变得疯狂

    我有一个数据库 我正在尝试执行以下查询 SELECT COUNT FROM Resource WHERE Name LIKE ChinaApp SELECT COUNT FROM Resource WHERE Name LIKE China
  • 如何在 SQL Server 查询中的 FROM 子句中使用变量?

    我正在创建一个查询 该查询将选择表中的所有数据 查询将根据我将传递给存储过程的变量选择表 在我的例子中 如果我执行example sp table1它将选择table1 如果我使用同样的事情example table table2 应该选择
  • 存储过程上的 OdbcCommand - 输出参数上出现“未提供参数”错误

    我正在尝试执行存储过程 通过 ODBC 驱动程序针对 SQL Server 2005 但收到以下错误 过程或函数 GetNodeID 需要参数 ID 但未提供该参数 ID 是我的过程的 OUTPUT 参数 在存储过程中指定了一个输入 mac

随机推荐

  • Vuejs 获取事件正在调用的元素?

    我有多个列表项 我想在单击它们时打开活动类 ul class list body li Pils li li Dubbel li li Tripel li li Quadrupel li li Wit li ul 我已经有一个setFilt
  • 如何使用 PHP 将文件 POST 到 REST 服务器而不将文件写入磁盘?

    我正在尝试将 XML 文件作为内部 API 的 POST 方法的一部分发送到服务器 所有 PHP 文档都指出使用 postVars file path to file xml 来实际发送文件 我想从字符串发送文件 但它仍然需要作为文件上传而
  • 在.NET Framework 2中播放PCM数据?

    我有一个从相机中提取的 u Law 压缩 PCM 数据流 我需要在扬声器上播放它吗 有人知道怎么做吗 我尝试过将 u Law 解码为普通的 WAV 数据 然后使用 SoundPlayer 但它似乎从来没有工作过 SoundPlayer 总是
  • 在函数参数中使用await

    是否可以使用带有参数的await 例如 const run async gt getStudentDetails await getStudentId 即使是这样 这似乎也不是最好的主意 以前有人这样做过吗 是的 您可以使用await每个任
  • 提供继承的静态属性(概念上)

    我有一个 C 基类 我要根据每个类型 而不是每个实例 将信息与其关联 本质上 我希望所有子类都呈现一个 Icon 和一个代表该类型的FriendlyName 我想not必须创建一个类型实例来获取此信息 并且我想要求所有子类提供此信息 理想情
  • 将 Xcode 包版本设置为 git hash

    在 Xcode 中 我想将项目捆绑包版本设置为 git 哈希 以在修订版本和构建之间创建唯一的链接 我已经看到了几篇关于此的帖子 增加了每个版本的内部版本号 但对我来说这似乎过多 我希望有一个内部版本号 测试人员可以在发件人反馈时参考 我在
  • 当通过 JavaScript 设置时,溢出:隐藏不适用于 Firefox 5

    这已被证实是 Firefox 中的一个错误 您可以在以下位置了解更多信息 https bugzilla mozilla org show bug cgi id 686247 https bugzilla mozilla org show b
  • 如何从字符串中删除
    标签等?

    我需要脱掉所有 br 和所有 引号 和所有 和 并仅用空格替换它们 我怎样才能做到这一点 PHP 语言 我已经尝试过这个 br description preg replace br description 但它又回来了 lt gt 代替每
  • Microsoft.Office.Interop.* 版本 12 和 14 之间有什么区别?

    我已经安装了 Visual Studio 2010 和 Office 2007 当我转到 添加引用 并搜索 Office Interop 时 我可以看到每个引用在版本 12 和 14 中出现两次 我最初尝试了版本 14Microsoft O
  • 如何在 Visual Studio 2010 上安装 Symbolic C++?

    我有Symbolic C 可以与V集成的版本 没有关于如何安装它的文档 我从这个网站得到它 它有它如何工作的示例 http issc uj ac za symbolic symbolic html http issc uj ac za sy
  • 使用来自多个(虚拟)机器的单个 emacs 实例

    我喜欢 emacsclient 它允许我使用单个 Emacs 框架进行所有编辑 甚至当程序想要打开编辑器时 即export EDITOR emacsclient 我也想让它在虚拟机上也能这样工作 我可以在我的单帧设置中使用 Tramp 来使
  • MouseLeftButtonDown 没有被解雇

    我有一个从 UserControl 类派生的 WPF 用户控件 MouseLeftButtonDown 根本没有被控件触发 我添加了事件处理程序并尝试如下 我想它是在其他地方处理的 如何调试并找到它在哪里得到处理 任何帮助都值得赞赏 pro
  • 安装了JDK但没有javap?

    我安装了 JDK 10 0 2 在程序的类文件文件夹中打开 cmd 然后尝试命令 javap Simulation class 我收到错误消息 未找到命令 javap 我做错了什么 你必须有你的 JAVA HOME bin目录添加到系统PA
  • Firebase Admin SDK 是否执行任何缓存?

    我最近一直在使用带有云功能的Firebase 这个问题突然出现在我的脑海中 如果在我的云函数中 使用 Firebase Admin SDK 在单个函数调用中对同一文档执行多次读取 它会算作数据库中的多次读取还是会缓存数据 Example a
  • 在一个项目中混合 Web Api 和 ASP.Net MVC 页面

    如何在一个项目中混合 Web API 和 ASP Net MVC 页面 例如 我有模型用户 我希望在同一个项目中 有一个 ApiController 可以响应所有用于管理用户实体的 HTTP 动词 同时有一个 Controller 可以根据
  • Eclipse 中有效 HTML5 属性的警告

    我使用 Eclipse 并编写包含 HTML5 内容的 jsp 文件 所以我有例如这一行 div class test 在 Eclipse 中我收到警告 Undefined attribute name data role 需要做什么才能使
  • 如何将我的 nib 文件的所有者设置为另一个 nib 文件中的对象?

    我是 Cocoa 新手 无法将我的 nib 文件拆分为多个 nib 文件 My MainMenu nib包含一个Tracker Controller对象 它是一个子类NSObject 它有一个出口Show Tracker我的主菜单中的菜单项
  • 在 Ruby 中解析文本

    我正在编写一个用于导入 SketchUp 组件信息的脚本 他们的帮助页面上有一位非常乐于助人的人 帮助我创建了一个可用于 编辑 的逐行文本文件的文件 现在我准备将其提升到一个新的水平 直接从 FreePCB 创建的原始文件导入 我希望使用的
  • 在 Rust 中,用于连接任意数量的组件来构建路径的宏是什么?

    在Python中 有一个函数叫做os path join 允许使用操作系统的路径分隔符将多个字符串连接到一个路径中 在 Rust 中 只有一个函数join 将字符串或路径附加到现有路径 这个问题无法用普通函数解决 因为普通函数需要有固定数量
  • 我可以在 SQL Server 2005 中使用 MERGE 语句吗?

    我正在使用 SQL Server 2005 我想在 SQL Server 2005 中的单个查询中创建 MERGE 语句或概念 这可能吗 MERGE http technet microsoft com en us library bb51