2

37,000 を超えるレコードを含む画像テーブルを含む 1 つのデータベースがあります。各レコードには、バイナリ データ形式の画像が含まれています。これらの 37,000 レコードすべてを、約 12,500 レコードを持つ同じテーブルとスキーマを含む別のデータベースに取得する必要があります。これらの画像を IF NOT EXISTS アプローチでデータベースに挿入して、完了時に重複がないことを確認する必要があります。

データをExcelにエクスポートして、スクリプトにフォーマットしてみました。(以前に他のテーブルでこれを行ったことがあります。) 問題は、Excel がバイナリ データをサポートしていないことです。

SSMS で「スクリプトの生成」ウィザードも試しましたが、.sql ファイルが 18 GB をはるかに超えており、PC で処理できなかったため、機能しませんでした。

これを行うことができる他の SQL ツールはありますか? 私は何時間もグーグルで検索しましたが、役に立ちませんでした。ご協力いただきありがとうございます!

4

3 に答える 3

2

「データのエクスポート」機能を試してみませんか? これはうまくいくはずです。

ソース データベースを右クリックし、[タスク]、[データのエクスポート] の順に選択します。その後、指示に従ってください。設定を保存して定期的にタスクを実行することもできます。

また、bcp.exe ユーティリティを使用して、あるデータベースからデータを読み取り、別のデータベースに挿入することもできます。

ただし、最初の方法を使用することをお勧めします。

更新: 重複を避けるために、画像を比較できる必要があります。残念ながら、画像を直接比較することはできません。varbinary(max)ただし、比較のためにそれらをキャストできます。

そこで、私のアドバイスは次のとおり
です。 1. テーブルを新しいデータベースに次の名前でコピーしますtmp_images
。 2.mergeコマンドを使用して、新しい画像のみを挿入します。

于 2013-02-14T22:39:01.043 に答える
2

これにはSQL Workbench/Jを使用しました。

テキスト ファイルを介してWbExportWbImportのいずれかを使用できます (バイナリ データは別のファイルとして書き込まれ、テキスト ファイルにはファイル名が含まれます)。

または、WbCopyを使用して、中間ファイルなしでデータを直接コピーすることもできます。

「存在しない場合」のアプローチを実現するには、更新/挿入モードを使用できますが、既存の行が変更されます。

「存在しない場合にのみ挿入するモード」はないと思いますが、一意のインデックスを定義してエラーを無視することでこれを実現できるはずです(ただし、それは実際には高速ではありませんが、その少数の行)。

「存在」チェックがより複雑な場合は、データをターゲット データベースのステージング テーブルにコピーし、SQL を使用してそれを実際のテーブルにマージすることができます。

于 2013-02-14T22:49:16.900 に答える
1
INSERT INTO DB1.dbo.table_name
SELECT  * FROM DB2.dbo.table_name
WHERE column_name NOT IN
(   
  SELECT column_name FROM DB1.dbo.table_name
)
于 2013-02-20T18:56:54.677 に答える