レコードとそれに関連する子を同じデータベース内の新しいレコードと新しい関連する子にコピーできる関数をC#で作成しました。(これは、以前の作業を新しい作業のテンプレートとして使用できるようにするアプリケーション用です。)
とにかく、それはうまく機能します...これがコピーをどのように達成するかについての説明です:
2列のメモリベースのルックアップテーブルに、各レコードの現在の主キーを入力します。次に、新しいコピーレコードを個別に作成するときに、ルックアップテーブルを新しいレコードのID PKで更新します[SCOPE_IDENTITY()から取得]。これで、関連する子をコピーするときに、新しい親PKを検索して、新しいレコードにFKを設定できます。
テストでは、SQL Server 2005ExpressEditionのローカルインスタンスにリレーショナル構造をコピーするのに1分しかかかりませんでした。残念ながら、生産がひどく遅いことが証明されています!私のユーザーは、LANを介してSQLServerへの親レコードごとに60,000以上のレコードを処理しています。私のコピー機能は引き続き機能しますが、これらの各レコードは個別のSQL UPDATEコマンドを表し、通常の2%のアイドル状態から約17%のCPUでSQLServerをロードします。50,000レコードのコピーのテストを終えたところですが、20分近くかかりました。
SQLクエリまたは保存されたプロシージャでこの機能を複製して、各クライアントからLAN経由でブラストする代わりに、SQLサーバーにすべてのコピー作業を実行させる方法はありますか?
(Microsoft SQL Server 2005 Standard Editionを実行しています。)
ありがとう!
-デレク