行が存在しない場合は挿入し、存在する場合は更新する必要があります。 MySQL用のこのソリューションを見つけました:
INSERT INTO table (id, name, age) VALUES(1, "A", 19) ON DUPLICATE KEY UPDATE
name = "A"、age = 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;