sql-server - MSSQL 插入或更新(如果存在)
问题描述
如果不存在则需要插入一行,如果存在则更新。我为 MySQL 找到了这个解决方案:
INSERT INTO table (id, name, age) VALUES(1, "A", 19) ON DUPLICATE KEY UPDATE
姓名=“A”,年龄=19
但我找不到类似的 MSSQL ..
解决方案
您可以按以下顺序使用 2 个语句 ( INSERT
+ UPDATE
)。如果不存在更新将不会更新任何内容,如果存在则插入不会插入:
UPDATE T SET
name = 'A',
age = 19
FROM
[table] AS T
WHERE
T.id = 1
INSERT INTO [table] (
id,
name,
age)
SELECT
id = 1,
name = 'A',
age = 19
WHERE
NOT EXISTS (SELECT 'not yet loaded' FROM [table] AS T WHERE T.id = 1)
或MERGE
:
;WITH ValuesToMerge AS
(
SELECT
id = 1,
name = 'A',
age = 19
)
MERGE INTO
[table] AS T
USING
ValuesToMerge AS V ON (T.id = V.id)
WHEN NOT MATCHED BY TARGET THEN
INSERT (
id,
name,
age)
VALUES (
V.id,
V.name,
V.age)
WHEN MATCHED THEN
UPDATE SET
name = V.name,
age = V.name;
推荐阅读
- javascript - 向下滚动时隐藏标题框阴影设置
- java - 在 IntelliJ 运行器中配置 @RunWith 以使用 CucumberWithSerenity.class 而不是 Cucumber.class
- amazon-web-services - RedShift 表行在使用另一个表更新后重复
- java - Synchronization-factory 删除 sftp:inbound-channel-adapter 的文件夹
- database - 双重哈希与加盐相结合是一种有效的密码存储技术吗?
- c# - 如何创建具有动态类型的 lambda 表达式
- regex - Perl 正则表达式一个衬里无法正常工作
- javascript - 覆盖并取消特定元素上的所有 jquery/javascript 事件
- javascript - 在这种情况下不能使用 v-img 吗?
- flutter - CustomScrollView 和 PageView 问题