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

すべての行に異なる値が割り当てられるようにする単純な更新ステートメント

    いくつかのテストテーブルでは、私の最後の元の計画は次のようになります。

    結果を1回計算し、それをsppolにキャッシュしてから、その結果を再生します。次のことを試して、SQL Serverがサブクエリを相関していると見なし、外側の行ごとに再評価する必要があると見なすことができます。

    UPDATE table1
    SET    table2Id = (SELECT TOP 1 table2Id
                       FROM   table2
                       ORDER  BY Newid(),
                                 table1.table1Id)
    

    私にとって、スプールなしでこの計画を立てます。

    table1の一意のフィールドで相互に関連付けることが重要です ただし、スプールが追加された場合でも、相関値は行ごとに異なるため、スプールを巻き戻す(最後の結果を再生する)のではなく、常にリバウンドする必要があります。

    テーブルが大きい場合、必要な作業は2つのテーブルの行の積であるため(table1の各行に対して)、これは遅くなります。 table2のフルスキャンを実行する必要があります )



    1. サブクエリエラーとxmllaggを使用した値が多すぎます

    2. 教義リスナーに要素を挿入する

    3. MySQLCAPIの使用-プリペアドステートメントを使用して行の挿入が成功したかどうかを確認します

    4. PL/SQLの日付から日数を減算する