エンジニアの将来って?

現在7年目のCOBOL→Java→C#エンジニアが、将来への考えや勉強のアウトプット、たまに腎臓について書くブログです

【SQL Server】特定のテーブルのスキーマとデータをInsert文でエクスポートする方法を解説します

こんにちは。たいら(@tairaengineer2)です。
この記事では、SQL Serverで特定のテーブルからスキーマとデータ付きでInsert文をエクスポートするやり方について解説します。

 

前提条件

この記事では、Microsoft SQL Server2017を使っています。
インストールの仕方は、下の記事をご参考ください。

www.tairax.com

エクスポートするテーブル

この記事でエクスポートするテーブルの構造は以下の通りです。

f:id:Tairax:20190401233033p:plain

【Sample】というデータベースの【dbo.Person】というテーブルです。
【dbo.Person】の中は

f:id:Tairax:20190401083849p:plain

  • id
  • name
  • age
  • job

という項目があります。
テーブルには

f:id:Tairax:20190401084642p:plain

という、4つのレコードが入っています。

このテーブルをスキーマとデータ付きでエクスポートします。

スキーマとデータ付きでInsert文をエクスポートする

エクスポートするテーブルのデータベースを選択します。

f:id:Tairax:20190401233252p:plain

この状態で右クリックします。

f:id:Tairax:20190401233604p:plain

  1. タスク
  2. スクリプトの生成

の順番でクリックします。

f:id:Tairax:20190401231552p:plain

【スクリプトの生成とパブリッシュ】という画面がポップアップします。
【次へ】を押します。

f:id:Tairax:20190401232039p:plain

スクリプトを生成するデータベースを選択する画面になります。
ここで

f:id:Tairax:20190401232235p:plain

【特定のデータベースオブジェクトを選択】のラジオボタンを選択します。

f:id:Tairax:20190401232440p:plain

テーブルの左にあるプラスのアイコンをクリックします。

f:id:Tairax:20190401233808p:plain

選択したデータベースにあるテーブルが表示されます。
【dbo.Person】というテーブルをエクスポートしたいので

f:id:Tairax:20190401233958p:plain

チェックを入れて、【次へ】を押します。

f:id:Tairax:20190401234152p:plain

【スクリプトの保存方法またはパブリッシュ方法を指定してください】という画面に移動します。
ここでファイル名をどこかに記録しておきましょう。
理由は後ほど書きます。

f:id:Tairax:20190401234449p:plain

【詳細設定】を押します。

f:id:Tairax:20190401234616p:plain

【スクリプトの作成の詳細オプション】を設定できます。
ここで1か所変更する場所があります。
スクロールを移動させて、

f:id:Tairax:20190401234909p:plain

【スクリプトを作成するデータの種類】を選択します。
【スキーマのみ】の右横にある三角ボタンを押します。

f:id:Tairax:20190401235857p:plain

  • スキーマとデータ
  • スキーマのみ
  • データのみ

のドロップダウンリストが表示されます。
この中の

f:id:Tairax:20190401235248p:plain

【スキーマとデータ】を選択します。

f:id:Tairax:20190402002203p:plain

【スクリプトを作成するデータの種類】【スキーマとデータ】を選択していることを確認して、【OK】ボタンを押します。

f:id:Tairax:20190402002432p:plain

この状態で【次へ】ボタンを押します。

f:id:Tairax:20190402002632p:plain

選択内容を確認する画面になります。
プラスのアイコンを押して、内容を確認します。

f:id:Tairax:20190402003141p:plain

テーブルは合っているか、や

f:id:Tairax:20190402003432p:plain

変更したオプションはスキーマとデータになっているかを確認します。
確認できたら

f:id:Tairax:20190402003628p:plain

【次へ】ボタンを押します。

f:id:Tairax:20190402003759p:plain

スクリプトを作成中になります。

f:id:Tairax:20190402003935p:plain

できました!
【完了】ボタンを押します。

では、エクスポートしたSQLを見てみましょう。
格納されている場所は、先ほど記録したファイル名の場所にSQLがエクスポートされています。

f:id:Tairax:20190402081240p:plain

中身を見てみます。

f:id:Tairax:20190402081506p:plain

ちゃんとスキーマとデータのInsert文をエクスポートできました!

エクスポートしたInsert文を実行してみる

本当にできるかどうか実際にやってみましょう。

f:id:Tairax:20190402081951p:plain

【Test】というデータベースを作ります。

データベースの作り方は以下の記事をご参考ください。

www.tairax.com

【Test】のテーブルに、【dbo.Person】が無いことを確認します。。

f:id:Tairax:20190402083525p:plain

【dbo.Person】がないですね。

【Test】を選択した状態で

f:id:Tairax:20190402082457p:plain

右クリックをします。

f:id:Tairax:20190402083030p:plain

【新しいクエリ】を選択します。

f:id:Tairax:20190402083232p:plain

【オブジェクトエクスプローラー】の横に、クエリを実行できるスペースができます。
この中に先ほどエクスポートしたInsert文をコピー&ペーストします。

f:id:Tairax:20190402084329p:plain

では、実行しましょう!・・・と言いたいところですが。
この状態で赤枠の【実行】ボタンを押すと、エラーになります。
試しに実行してみましょう。

f:id:Tairax:20190402084843p:plain

メッセージ 2714、レベル 16、状態 6、行 8
データベースに 'Person' という名前のオブジェクトが既に存在します。
メッセージ 2627、レベル 14、状態 1、行 19
制約 'PK_Person' の PRIMARY KEY 違反。オブジェクト 'dbo.Person' には重複するキーを挿入できません。重複するキーの値は (a001) です。
ステートメントは終了されました。
メッセージ 2627、レベル 14、状態 1、行 20
制約 'PK_Person' の PRIMARY KEY 違反。オブジェクト 'dbo.Person' には重複するキーを挿入できません。重複するキーの値は (a002) です。
ステートメントは終了されました。
メッセージ 2627、レベル 14、状態 1、行 21
制約 'PK_Person' の PRIMARY KEY 違反。オブジェクト 'dbo.Person' には重複するキーを挿入できません。重複するキーの値は (a003) です。
ステートメントは終了されました。
メッセージ 2627、レベル 14、状態 1、行 22
制約 'PK_Person' の PRIMARY KEY 違反。オブジェクト 'dbo.Person' には重複するキーを挿入できません。重複するキーの値は (a004) です。
ステートメントは終了されました。

原因は、ここです。

f:id:Tairax:20190403082305p:plain

最初のUSEはデータベースを設定しています。
Sampleを指定しているので、すでに【dbo.Person】というテーブルがあるのでエラーが出ました。

データベースは【Test】を変更します。

f:id:Tairax:20190403083248p:plain

実行します。

f:id:Tairax:20190403083644p:plain

ちゃんと処理されました!
本当に正常に処理されているか確認してみます。
データベース【Test】のテーブルを見てみます。

f:id:Tairax:20190403084210p:plain

【dbo.Person】というテーブルがあります。
中身を見てみましょう。

f:id:Tairax:20190403084611p:plain

データも【Sample】の【dbo.Person】と同じですね!
無事スキーマとデータをエクスポート出来たことが確認できました。

まとめ:SQL Serverからエクスポートしてみよう!

以上が特定のテーブルのスキーマとデータをInsert文でエクスポートする方法です。

あなたのご参考になったのなら、とても嬉しいです(*´▽`*)
ではでは~(・ω・)ノシ

 

他にもSQL Serverについて記事を書いています。
良ければこちらもご参考ください。

【SQL Server】SELECTで出した結果をcsvに出力する方法を解説します

【SQL Server】Transact-SQLとは?解説します