SQL Server是否提供类似MySQL的重复键更新

wkftcu5l  于 2022-12-17  发布在  SQL Server
关注(0)|答案(5)|浏览(144)

在MySQL中,如果指定ON DUPLICATE KEY UPDATE并且插入的行会导致UNIQUE索引或PRIMARY KEY中出现重复值,则会对旧行执行UPDATE。例如,如果列a声明为UNIQUE并且包含值1,则以下两个语句具有相同的效果:

INSERT INTO table (a,b,c) VALUES (1,2,3)
  ON DUPLICATE KEY UPDATE c=c+1;

UPDATE table SET c=c+1 WHERE a=1;

我不相信我在T-SQL中遇到过类似的东西。SQL Server提供了任何可以与MySQL的重复键更新相媲美的东西吗?

vzgqcmou

vzgqcmou1#

令我惊讶的是,这个页面上的答案都不包含实际查询的示例,所以现在开始:
插入数据然后处理重复数据的更复杂示例

MERGE
INTO MyBigDB.dbo.METER_DATA WITH (HOLDLOCK) AS target
USING (SELECT
    77748 AS rtu_id
   ,'12B096876' AS meter_id
   ,56112 AS meter_reading
   ,'20150602 00:20:11' AS time_local) AS source
(rtu_id, meter_id, meter_reading, time_local)
ON (target.rtu_id = source.rtu_id
  AND target.time_local = source.time_local)
WHEN MATCHED
  THEN UPDATE
      SET meter_id = '12B096876'
         ,meter_reading = 56112
WHEN NOT MATCHED
  THEN INSERT (rtu_id, meter_id, meter_reading, time_local)
      VALUES (77748, '12B096876', 56112, '20150602 00:20:11');
w46czmvw

w46czmvw2#

没有等效的DUPLICATEKEYUPDATE,但是MERGE和WHENMATCHED可能对您有用
Inserting, Updating, and Deleting Data by Using MERGE

imzjd6km

imzjd6km3#

你可以反过来试试。它或多或少都是一样的。

UPDATE tablename 
SET    field1 = 'Test1', 
       field2 = 'Test2' 
WHERE  id = 1 

IF @@ROWCOUNT = 0 
  INSERT INTO tablename 
              (id, 
               field1, 
               field2) 
  VALUES      (1, 
               'Test1', 
               'Test2')
qq24tv8q

qq24tv8q4#

SQL Server 2008作为TSQL的一部分具有此功能。
请参见此处的MERGE语句文档-http://msdn.microsoft.com/en-us/library/bb510625.aspx

zbsbpyhn

zbsbpyhn5#

SQL Server 2000以后有一个替代触发器的概念,它可以完成所需的功能-尽管会有一个讨厌的触发器隐藏在幕后。
检查“插入或更新?”部分
http://msdn.microsoft.com/en-us/library/aa224818(SQL.80).aspx

相关问题