Mic*_*eyn 6 t-sql sql-server-2008 sql-server-2008-r2
假设我有一张桌子,我想插入一行.新行的键可能已经匹配表中现有行的键,在这种情况下,我想更新现有行.或者,它可能不存在于表中,在这种情况下应插入新行.
执行此类操作的最有效方法是什么?我在考虑先做一个SELECT(或许有EXISTS)看一个特定的密钥是否存在,然后是UPDATEif present和INSERTif if not.为了避免竞争条件,你可能需要为这个语句组合保留a UPDLOCK和a HOLDLOCK.这似乎过于复杂和低效.
我想知道在SQL Server 2008R2中是否有更有效的方法来执行此操作.
mar*_*c_s 10
SQL Server 2008和更新版本有一个MERGE语句,它正是这样做的.
有关详细信息,请参阅MERGE上的MSDN联机丛书文档.
基本上,你需要四件事:
所以你基本上定义如下:
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)
Run Code Online (Sandbox Code Playgroud)
这是作为一个语句完成的,并由SQL Server高度优化.
| 归档时间: |
|
| 查看次数: |
102 次 |
| 最近记录: |