SQL Server - スクリプトを生成してテーブルのデータをコピーする方法

SQL Server のテーブルのデータをコピーする方法

開発環境やテスト環境など、環境違いで同じスキーマのデータベースがあって、テーブルのデータをコピーしたいような時ありますよね。

全部テーブルのデータをコピーしたいのであれば、データベースのバックアップファイルをリストアするなどして、データベースごと置き換えるのが早いですね。

時にはテーブルひとつふたつのデーターだけコピーしたい時もあるかもしれません。

そのような、ちょっとコピーしたい時には、SQL Server Management Studio でスクリプトを生成してデータをコピーする方法を覚えておくと便利です。

今回は、コピー元のデータベースで INSERT スクリプトを生成してテーブルのデータをコピーする方法をご紹介します。


SQL Server Management Studio のスクリプトの生成

SQL Server Management Studio のスクリプトの生成機能を使って、データをコピーする INSERT スクリプトを生成します。

以下の例では Test という名前のデータベースの Student と Test テーブルのデータの INSERT スクリプトを生成します。


1. オブジェクトエクスプローラーでデータベースを選択し、右クリックで [タスク] > [スクリプトの生成] を選択します。

スクリプトを生成してテーブルのデータをコピーする方法 1


2. ウィザードの説明のページが出てくるので [次へ] をクリックします。

スクリプトを生成してテーブルのデータをコピーする方法 2


3. [オブジェクトの選択] ページが表示されるので、[特定のデータベースオブジェクトの選択] を選びます。

「テーブル」 の横のプラスボタンをクリックしてテーブルの一覧を出し、今回データをコピーしたい Student と Test テーブルにチェックを入れ、[次へ] をクリックします。

スクリプトを生成してテーブルのデータをコピーする方法 3


4. [スクリプト作成オプションの設定] ページが表示されます。 今回はスクリプトを D:\Temp\CopyData.sql ファイルに出力するようにしました。 そして、[詳細設定]をクリックします。

スクリプトを生成してテーブルのデータをコピーする方法 4


5. 詳細設定の [スクリプトを作成するデータの種類]のオプションを [データのみ] に設定し、[OK] をクリックします。

今回はコピー先のデータベースに既に同じ名前のテーブルがある前提ですが、コピー先にテーブルがない時は [スキーマとデータ] を選択してください。

スクリプトを生成してテーブルのデータをコピーする方法 8


6. 先ほどの [スクリプト作成オプションの設定] の画面に戻るので、そこから [次へ] をクリックします。

スクリプトを生成してテーブルのデータをコピーする方法 9


7. [概要] ページが表示されるので [次へ] をクリックします。

スクリプトを生成してテーブルのデータをコピーする方法 5


8. [スクリプトの保存またはパブリッシュ] ページが表示され、アクションの実行結果が表示されるので終わったら [完了] をクリックします。

スクリプトを生成してテーブルのデータをコピーする方法 6


生成された CopyData.sql ファイルを開いてみると、Student と Test テーブルのデータの INSERT ステートメントが生成されています。

Student と Test テーブルには IDENTITY カラムがあるので、データをインサートできるように SET IDENTITY_INSERT の ON/OFF まで追加してくれています。

スクリプトを生成してテーブルのデータをコピーする方法 7


このスクリプトをコピー先のデータベースで実行します。 データベース名が違う場合は一番上の行の USE の後のデータベース名を変更して実行してください。

スクリプトを生成してテーブルのデータをコピーする方法 10

これで、コピー元のデータベースの Student と Test テーブルのデータが、コピー先のデータベースの Student と Test テーブルにコピーできました。


スクリプトを生成してテーブルのデータをコピーする際の注意点

この方法は単純に選択したテーブルのデータに対して INSERT ステートメントを生成し、それを実行するだけです。

ですので、挿入しようとするデータが、コピー先のテーブルの制約違反になるようなケースはエラーになります。


例えば、コピー先のテーブルのプライマリーキーなど UNIQUE 制約がついているカラムの値と重複してしまうデータがある場合はエラーになります。

コピー元のデータと全く同じにしたい時は、コピー先のテーブルのレコードを全て削除してからスクリプトを実行すると良いと思います。


また、コピー先のテーブルに外部キーのついているカラムの値が含まれていて、その外部キーが参照しているカラムに挿入しようとしている値がないとエラーになります。

関連するデータはプライマリーキーとなるテーブルから順序を考慮しながら全てコピーするようにしてくださいね。

© 2010-2024 SQL Server 入門