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

行がまだ存在しない場合にのみ行を挿入します

    「JFDI」パターンはどうですか?

    BEGIN TRY
       INSERT etc
    END TRY
    BEGIN CATCH
        IF ERROR_NUMBER() <> 2627
          RAISERROR etc
    END CATCH
    

    真剣に、これは、特に大量の場合に、ロックなしで最も速く、最も同時に実行されます。UPDLOCKがエスカレートされ、テーブル全体がロックされた場合はどうなりますか?

    レッスン4を読む:

    レッスン4: インデックスを調整する前にupsertprocを開発するとき、私は最初にIf Exists(Select…)を信頼しました lineはすべてのアイテムに対して起動し、重複を禁止します。灘。同じアイテムが同じミリ秒でアップサートにヒットし、両方のトランザクションが存在しないことを確認して挿入を実行するため、短時間で何千もの重複が発生しました。多くのテストを行った後、解決策は一意のインデックスを使用し、エラーをキャッチして、トランザクションが行を表示し、挿入の代わりに更新を実行できるようにすることでした。



    1. ソフトウェア開発の役割の構造:データサイエンティスト

    2. ORACLE-サブクエリでカウントを選択

    3. PostgreSQLのRPAD()関数

    4. 列名または指定された値の数がテーブル定義と一致しません