私の会社は最近、64,000+行のデータを公平に定期的に更新する必要がありました。多くの行のデータをSQL Serverの異なる値で更新する最も速い方法
他の解決策がある場合は、私は他の人の参照のためにここに投稿していますが、フィードバックを見つけることもできます。
説明:各行には、更新されている固有の値があり、クライアント上で計算されるか、ユーザーによって手動で設定されます。
私の会社は最近、64,000+行のデータを公平に定期的に更新する必要がありました。多くの行のデータをSQL Serverの異なる値で更新する最も速い方法
他の解決策がある場合は、私は他の人の参照のためにここに投稿していますが、フィードバックを見つけることもできます。
説明:各行には、更新されている固有の値があり、クライアント上で計算されるか、ユーザーによって手動で設定されます。
これは、すべての行で同じ列が更新される必要があり、値が異なる場合にのみ有効です。
hh?
一括更新の仕組みはわかりませんが、新しい行にはすべての列に新しい値が含まれています。その場合は、各行を無条件で更新できます。あなたはもちろんの
update tablea a join bulkupdate b on (somekey)
set a.col1 = coalesce(b.col1, a.col1),
a.col2 = coalesce(b.col2, a.col2)
etc.
を行うことができ、その場合には
それとも唯一の非NULL列を更新する必要が、2つ目のシナリオでは、何の列はNULLに更新することはできないが、あなたはあなたの大部分を満たしている場合2番目の方法で列を更新すると、最初に、どのヌルが「データが実際にヌル」であり、「この列は更新されていない」ことを意味するのかわかりませんでした。
合体のアイデアはとてもいいです。 –
解決策1(不良):64k更新ステートメントをテーブルに送信します。非常に遅いです。
解決方法2(悪い):SqlDataAdapterバッチ処理モードを使用して、サーバーへのラウンドトリップを減らします。より良いが、まだ非常に遅い。
解決策3a:新しいテーブル(または一時テーブル)を作成します。 SqlBulkCopyクラスを使用して、実表を更新するために必要なデータを含む新しい行を一時表に挿入します。 tempテーブルをループして更新を行うストアドプロシージャを実行します。
ソリューション3a:上記のように一括挿入を行いますが、実表と一時表を結合してフィールドの更新を行う単一の更新文を実行します。これは、すべての行が同じ列を更新する必要があるが、値が異なる場合にのみ有効です。
更新するテーブルのPKがある場合は、ストアドプロシージャの代わりにUPDATEコマンドを実行するだけで、更新の複雑さを誤解している可能性があります。 –
あなたはさらに、彼らがどんな種類のアップデートを説明しているかを知ることができます - もしそれが乱数またはGUIDであれば、それは1つのステートメントで行うことができます! – Rad
これらはランダム値ではなく、各行は特定の値を取得します。 –