Search code examples
sql-servermssql-jdbc

MSSQL INSERT OR UPDATE if EXISTS


Need to insert a row if its not exist and update if exists. I've found this solution for MySQL:

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

name="A", age=19

But I can't find similar for MSSQL..


Solution

  • You can use 2 statements (INSERT + UPDATE) in the following order. The update won't update anything if it doesn't exist, the insert won't insert if it exist:

    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)
    

    Or a 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;