Ben*_*old 56 mysql t-sql sql-server
在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;
Run Code Online (Sandbox Code Playgroud)
我不相信我在T-SQL中遇到过类似的东西.SQL Server是否提供了与MySQL的ON DUPLICATE KEY UPDATE相当的东西?
小智 44
没有DUPLICATE KEY UPDATE等价物,但MERGE和WHEN MATCHED可能适合您
Iva*_*anD 35
我很惊讶这个页面上没有一个答案包含一个实际查询的例子,所以你走了:
插入数据然后处理重复的更复杂的示例
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 local_time) 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');
Run Code Online (Sandbox Code Playgroud)
你可以换个方式试试。它或多或少地做同样的事情。
UPDATE tablename
SET field1 = 'Test1',
field2 = 'Test2'
WHERE id = 1
IF @@ROWCOUNT = 0
INSERT INTO tablename
(id,
field1,
field2)
VALUES (1,
'Test1',
'Test2')
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
54902 次 |
最近记录: |