sql-server-2008 – T-SQL是否可以通过一次快速操作进行更新/插入
发布时间:2020-05-23 05:22:47 所属栏目:MsSql 来源:互联网
导读:假设我有一张桌子,我想插入一行.新行的键可能已经匹配表中现有行的键,在这种情况下,我想更新现有行.或者,它可能不存在于表中,在这种情况下应插入新行. 执行此类操作的最有效方法是什么?我想首先做一个SELECT(可能是EXISTS)来查看是否存在特定的键,然后是UPDA
|
假设我有一张桌子,我想插入一行.新行的键可能已经匹配表中现有行的键,在这种情况下,我想更新现有行.或者,它可能不存在于表中,在这种情况下应插入新行. 执行此类操作的最有效方法是什么?我想首先做一个SELECT(可能是EXISTS)来查看是否存在特定的键,然后是UPDATE(如果存在)和INSERT(如果不存在).您可能需要为这种语句组合保留UPDLOCK和HOLDLOCK,以避免竞争条件.这似乎过于复杂和低效. 我想知道在SQL Server 2008R2中是否有更有效的方法来执行此操作. 解决方法SQL Server 2008和更新版本有一个MERGE语句,它正是这样做的.有关详细信息,请参阅MSDN Books Online docs on MERGE. 基本上,你需要四件事: >源(表或视图或内联SELECT语句) 所以你基本上定义如下: MERGE (targettable) AS t USING (sourcetable) AS s ON (JOIN condition between s and t) WHEN MATCHED THEN UPDATE SET t.Col1 = s.Col1,t.Col2 = s.Col2 (etc.) WHEN NOT MATCHED THEN INSERT(Col1,Col2,...,ColN) VALUES(s.Col1,s.Col2,......,s.ColN) 这是作为一个语句完成的,并由SQL Server高度优化. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- sql – INSERT INTO从两个不同的服务器数据库
- sql – 什么是{ts’2013-04-02 00:00:00′}?
- sql-server – 报表服务器无法解密用于访问报表服务器数据库
- 在LINQ to SQL中使用“Is NULL / not NULL”
- sql-server – 如何替换分号
- SQL Server sql自动增长标识导致导入数据问题的解决方法
- 数据库 – “ORA-28001:密码已过期”不可修复
- sql-server – 具有密钥/对表与XML字段和XPath的SQL Server
- mysql 5.7 docker 主从复制架构搭建教程
- sql – 如何检查Oracle中的数据库对象是表还是视图
