sql >> データベース >  >> RDS >> Sqlserver

SQLServerの単一行MERGE/upsertの構文

    私はついにMERGEを使用してUpsert構文を取得しました SQLServer2008で。Jacobが望んでいたものを使用する やるべきこと(アップサート):

    IF EXISTS(SELECT * FROM member_topic WHERE mt_member = 0 AND mt_topic = 110)
    BEGIN
        --update existing row
        UPDATE member_topic SET mt_notes = 'test'
        WHERE mt_member = 0
        AND mt_topic = 110
    END
    ELSE
    BEGIN
        --insert new row
        INSERT INTO member_topic (mt_member, mt_topic, mt_notes)
        VALUES (0, 110, 'test')
    END
    

    同等のMERGE 構文は次のとおりです:

    MERGE member_topic
    USING ( 
        VALUES (0, 110, 'test')
    ) AS foo (mt_member, mt_topic, mt_notes) 
    ON member_topic.mt_member = foo.mt_member 
       AND member_topic.mt_topic = foo.mt_topic
    WHEN MATCHED THEN
       UPDATE SET mt_notes = foo.mt_notes
    WHEN NOT MATCHED THEN
       INSERT (mt_member, mt_topic, mt_notes)
       VALUES (foo.mt_member, foo.mt_topic, foo.mt_notes)
    ; --A MERGE statement must be terminated by a semi-colon (;).
    


    1. SEC_CASE_SENSITIVE_LOGON12cで非推奨

    2. 集計関数AVGを使用してレコードをフィルタリングする方法

    3. Oracle-読み取り専用ユーザーを作成する方法

    4. CASEステートメントを使用してSQLServer2005の一部のレコードを更新したい