データベースとテーブルを作成するSQLスクリプトを作成する


102

別のSQL Serverに複製したいSQLデータベースとテーブルがあります。データベースとテーブルを1つのスクリプトで作成するSQLスクリプトを作成したいと思います。

ケースごとにSQL Management Studioを使用して「作成」スクリプトを作成できますが(データベースとテーブル)、両方の「作成」スクリプトを1つのスクリプトに結合するだけで十分かどうかを知りたいです。

ありがとう。


26
受け入れられた回答を変更していただけませんか?
skolima 2013

1
@skolimaは同意し、受け入れられた回答(Claytonによる)は最終的に結果を取得しますが、CJMの回答ははるかに速くなります
elmer007

回答:


18

SQL Server Management Studioでは、レプリケートするデータベースを右クリックし、[データベースのスクリプトを作成]を選択して、別のサーバーにそのデータベースをレプリケートするための適切なSQLファイルをツールに作成させることができます。作成するテーブルごとにこのプロセスを繰り返し、ファイルを単一のSQLファイルにマージできます。データベースを作成した後、テーブルを作成する前に、usingステートメントを追加することを忘れないでください。

SQL Serverの最新バージョンでは、これをSSMSの1つのファイルで取得できます。

  1. データベースを右クリックします。
  2. タスク
  3. スクリプトを生成する

これにより、データベース全体または一部のみをスクリプト化できるウィザードが起動します。これを行うT-SQLの方法はないようです。

SQL Serverスクリプトを生成する


182
スクロールし続ける... CJMの方法は99.99999%改善
ewitkows

CJMの答えはまだ十分ではありません。CJMのメソッドを適用した後、Shawna Jacobsメソッドも適用する必要があります。
Andrzej Martyna

とにかくこれを行うには、たとえばmysqlの標準SQLを使用しますか?
Benjamin Goodacre

378

Claytonの答えは(最終的には)そこに到達しますが、SQL2005 / 2008 / R2 / 2012では、はるかに簡単なオプションがあります。

データベースを右クリックし、を選択TasksしてGenerate Scripts、スクリプトウィザードを起動します。これにより、テーブル、インデックス、制約、ストアドプロシージャ、関数、ユーザーなどを含む完全なデータベースを再作成できる単一のスクリプトを生成できます。出力をカスタマイズするために構成できるオプションは多数ありますが、そのほとんどは自明です。

デフォルトのオプションでよければ、ほんの数秒ですべての作業を行うことができます。

データベース内のデータを(一連のINSERTとして)再作成する場合は、SSMSツールパック(SQL 2008バージョンでは無料、SQL 2012バージョンでは有料)もお勧めします。


5
これはすばらしいことです。私はこれを実行しただけで、時間を大幅に節約できました。
Bill Sambrone 2013年

@CJM私は私があなたを愛していると思います!:-P
ピエロアルベルト

私はそれらの手順を正確に実行しましたが、それでも絶対に大量のエラーが発生し、修正できません。何か助け?
user1789573 2015

これに関する独自の質問を投稿することをお勧めします。実行した手順と受け取ったエラーの詳細を必ず投稿してください。
CJM 2015

@ user1789573-Shawna Jacobsが書いたように-SSMSは依存関係(SSMS devteamの恥!)を気にしないので、「設計上」大量のエラーが発生します。Shawna Jacobs asnwerをフォローして、SSMSのこの弱点に取り組みます。
Andrzej Martyna

9

優れた説明はここにあります:SQL Server Management Studioでのスクリプトの生成

礼儀アリイッサ ここであなたがしなければならないことです:

  1. テーブルではなくデータベースを右クリックして、タスクを選択します->スクリプトを生成します
  2. 次->要求されたテーブル/テーブルを選択します(特定のデータベースオブジェクトを選択します)
  3. 次へ->詳細設定をクリック->スクリプト化するデータの種類=スキーマとデータ

テーブルのみを生成する(データなし)スクリプトを作成する場合は、手順の高度な部分をスキップできます。


7

SSMSがアカウントの実行順序を考慮しない理由がわかりませんが、考慮されません。これは小さなデータベースの問題ではありませんが、データベースに200個のオブジェクトがある場合はどうでしょうか。その場合、これらすべてを実行するのは本当に簡単ではないため、実行の順序は重要です。

SSMSによって生成された順序付けられていないスクリプトについては、次のように行くことができます

a)スクリプトを実行します(一部のオブジェクトは挿入されますが、いくつかのエラーが発生します)

b)データベースに追加されたスクリプトからすべてのオブジェクトを削除します

c)すべてが最終的に実行されるまでa)に戻る

代替オプションは、ApexSQLスクリプトなどのサードパーティツール、またはこのスレッドで既に言及されているその他のツール(SSMSツールパック、Red Gateなど)を使用することです。

これらすべてが依存関係を処理し、時間をさらに節約します。


1

はい、SQLステートメントを1つのスクリプトにいくつでも追加できます。注意すべきことは1つだけです。順序が重要です。作成するまで、テーブルにINSERTすることはできません。主キーが挿入されるまで外部キーを設定できません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.