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

SQLServerが存在しない場合は挿入

    以下のコードの代わりに

    BEGIN
       INSERT INTO EmailsRecebidos (De, Assunto, Data)
       VALUES (@_DE, @_ASSUNTO, @_DATA)
       WHERE NOT EXISTS ( SELECT * FROM EmailsRecebidos 
                       WHERE De = @_DE
                       AND Assunto = @_ASSUNTO
                       AND Data = @_DATA);
    END
    

    に置き換えます
    BEGIN
       IF NOT EXISTS (SELECT * FROM EmailsRecebidos 
                       WHERE De = @_DE
                       AND Assunto = @_ASSUNTO
                       AND Data = @_DATA)
       BEGIN
           INSERT INTO EmailsRecebidos (De, Assunto, Data)
           VALUES (@_DE, @_ASSUNTO, @_DATA)
       END
    END
    

    更新: (ポインティングしてくれた@Marc Durdinに感謝します)

    高負荷では、最初の接続がINSERTを実行する前に、2番目の接続がIF NOT EXISTSテストに合格する可能性があるため、これが失敗する場合があることに注意してください。つまり、競合状態です。トランザクションをラップしても解決しない理由については、stackoverflow.com / a/3791506/1836776を参照してください。



    1. PHPでmysql_*関数を使用すべきではないのはなぜですか?

    2. SQL自然結合

    3. OracleのNEXT_DAY()関数

    4. MariaDBでサーバー照合を取得する3つの方法