3

移行プロジェクトの一環として、一連のクエリを実行しようとしています。生成されるスクリプトは、レガシー データベースを分析し、古いエンティティのそれぞれを適切な新しいレコードにマップするスクリプトを生成するツールから生成されます。スクリプトは小規模なエンティティに対しては適切に実行されますが、一部のエンティティには数十万のレコードがあり、約 80 MB のスクリプト ファイルが生成されます。

これらのスクリプトを実行する最良の方法は何ですか?

より大きなスクリプトを扱うプロンプトからの SQLCMD はありますか?

スクリプトをさらに小さなスクリプトに分割することもできますが、移行を実行するために何百ものスクリプトを実行する必要はありません。

4

5 に答える 5

2

可能であれば、BULK INSERT 互換ファイルをエクスポートするようにエクスポート ツールを変更してください。

それがなければ、INSERT ステートメントを BULK INSERT が受け入れるものに解析するプログラムを作成できます。

于 2008-10-08T15:01:17.443 に答える
1

BULK INSERTは、従来の (非) またはBCPのフォーマット ファイルをXMLXML使用します。SET IDENTITY INSERT ON新しい ID を取得して子で使用する必要があり、データベースの設計が大幅に変更されたため、使用をやめることができませんか? もしそうなら、ID が割り当てられたら、SSIS などを使用して Merge Join を実行したほうがよいと思います。また、SSIS または BCP を使用して SQL のステージング テーブルにデータをロードし、通常の SQL (場合によっては SQL タスクの SSIS 内)OUTPUT INTO使用して ID を取得し、それらを children で使用することもできます

于 2008-10-08T16:50:46.193 に答える
0

「ファイルからのバルク挿入」オプションを調べましたが、ファイル形式の例が表示されません。ファイルは行形式を混在させることができますか、それとも常にCSV形式で一貫している必要がありますか?私が尋ねる理由は、さまざまな親/子テーブルに関係するIDを持っているためです。そのため、現在、行ごとの挿入が使用されています。

于 2008-10-08T15:38:35.700 に答える
0

INSERTこれは行ごとに1 つを生成しているように聞こえますが、実際にはかなり遅くなります。それらもすべてトランザクションにラップされている場合、それは少し遅くなる可能性があります(ただし、数百万行を保持している場合のように、トランザクションがほとんど不可能になるほど行数は大きくないように思えますトランザクションに挿入します)。

各挿入のスクリプトを作成する代わりに、ETL (DTS、SSIS、BCP、または BULK INSERT FROM、またはその他のツール) を調べてデータを移行することをお勧めします。

スクリプトを分割して部分的に実行することもできます (特に、現在すべてが 1 つの大きなトランザクションになっている場合)。PowerShell などを使用して個々のスクリプトの実行を自動化するだけです。

于 2008-10-08T15:02:53.340 に答える
0

スクリプトを実行するだけです。サイズが数百メガバイトのバックアップ/復元スクリプトを定期的に実行しています。30秒ほどしかかかりません。

この時間の間サーバーをブロックしないことが重要な場合は、実際に少し分割する必要があります.

また、TO OUTFILE を使用してデータを出力する mysqldump の -tab オプションも調べてください。これは、より効率的で読み込みが高速です。

于 2008-10-08T15:02:59.533 に答える