web-dev-qa-db-ja.com

MSSQL INSERT OR UPDATE if EXISTS

行が存在しない場合は挿入し、存在する場合は更新する必要があります。 MySQL用のこのソリューションを見つけました:

INSERT INTO table (id, name, age) VALUES(1, "A", 19) ON DUPLICATE KEY UPDATE    

name = "A"、age = 19

しかし、MSSQLに似たものは見つかりません。

3
Dmytro

次の順序で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;
10
EzLo