MSSQL 插入或更新(如果存在)
MSSQL INSERT OR UPDATE if EXISTS
如果不存在则需要插入一行,如果存在则更新。
我为 MySQL:
找到了这个解决方案
INSERT INTO table (id, name, age) VALUES(1, "A", 19) ON DUPLICATE KEY UPDATE
姓名="A",年龄=19
但我找不到类似的 MSSQL..
您可以按以下顺序使用 2 个语句 (INSERT
+ UPDATE
)。 update不存在不更新,insert存在不插入:
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;
我更喜欢检查 @@ROWCOUNT
。这是一个更紧凑的解决方案。
UPDATE table set name = 'A', age = 19 WHERE id = 1;
IF @@ROWCOUNT = 0
INSERT INTO table (id, name, age) VALUES(1, "A", 19);
如果不存在则需要插入一行,如果存在则更新。 我为 MySQL:
找到了这个解决方案INSERT INTO table (id, name, age) VALUES(1, "A", 19) ON DUPLICATE KEY UPDATE
姓名="A",年龄=19
但我找不到类似的 MSSQL..
您可以按以下顺序使用 2 个语句 (INSERT
+ UPDATE
)。 update不存在不更新,insert存在不插入:
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;
我更喜欢检查 @@ROWCOUNT
。这是一个更紧凑的解决方案。
UPDATE table set name = 'A', age = 19 WHERE id = 1;
IF @@ROWCOUNT = 0
INSERT INTO table (id, name, age) VALUES(1, "A", 19);