データベースSQL-Server全体をスクリプト化する


95

データベースからすべてのテーブル、プロシージャ、その他のオブジェクトのスクリプトを取得する方法はありますか?データベースをスクリプト化するオプションがあることは知っていますが、それは何らかの種類のトップレベルのスクリプトを提供するだけで、すべてのテーブル、プロシージャ、udfs、.etcを作成するためのスクリプトではありません。


6
彼はそれにSQL Server 2008というタグを付けたので、それを彼が使っていると思います。
コリンマッカイ

1
これはserverfault.comにアクセスすることを想定していませんか?
Salamander2007

回答:


162

Management Studioからデータベースを右クリックします。タスク->スクリプトの生成。

それでうまくいくはずです。


2
もう1つのオプションは、SQL SMOを使用してプログラムでスクリプト化することです(つまり、通常のスクリプトが必要な場合)
RobS

これを行うスクリプトを設定して、誰が実行しても設定が常に同じになるようにする方法はありますか?私の開発チームの人々が毎回異なる設定でこのファイルを上書きすると予測しています...
Joe Phillips

@ジョー、私はRobSが話しているルートを下に向かうでしょう。PowerShellでそれができるはずです。それ以外の場合は、RedGateツールまたはVisual Studio Team Systems with Database Developerを検討してください。
Chris Brandsma、2010

7
デフォルトでは、データをスクリプト化しません。[テーブル/ビューオプション]で[スクリプトデータ-> True]を選択します。もう1つの便利なオプションは、「スクリプトドロップ-> True」です
Stephen Hosking

1
生成されたスクリプトには、メニューの[追加]> [オプション]> [スクリプト生成]で最後のオプションを選択しない限り、列の照合順序に関する情報は含まれません。ドイツ語では、オプションは「Sortierungeinschließen」です。これらのオプションのほとんどはスクリプトを生成するウィザードに含まれていますが、これは含まれていません(SQL Server 2008)。ウィザードを呼び出す前に、実際にオプションを選択する必要があります。
Olivier Faucheux 2013

14

これを行うSchemaZenというオープンソースのコマンドラインユーティリティを作成しました。これは、management studioからのスクリプト作成よりもはるかに高速で、出力はバージョン管理に対応しています。スキーマとデータの両方のスクリプトをサポートします。

スクリプトを生成するには、以下を実行します。

schemazen.exeスクリプト--server localhost --database db --scriptDir c:\ somedir

次に、スクリプトからデータベースを再作成するには、次のコマンドを実行します。

schemazen.exe create --server localhost --database db --scriptDir c:\ somedir

こんにちは、Visual Studioで作成したローカルデータベースからSQLクエリを取得したいのですが、このツールを使用してどうすればよいですか?.sdfファイルの方向または使用方法を使用する必要がありますか?ありがとう。
Karlo A.López15年

そのコンパクトなSQLデータベースファイル。
Karlo A.López15年

1
聖なるクラップこれは速くて素晴らしいです。
ConstantineK

1
@hobsお役に立ててうれしいです。:D
Seth Reno

1
@SethRenoは私のdbのsysインデックスを破損しています= SMOは何もスクリプト化できません。スクリプトは可能です。そのため、基本的に手作業でがらくたを行う時間を大幅に節約できました。ところで、すべての印象的な高速リバースエンジニアリング、たとえば、SSMSよりも1000倍高速であり、SMO自体よりも高速であるように見えます(起動時間のために)。
ConstantineK

4

このタスクのユーティリティであるSMOscriptを作成しました

スクリプトの生成はSMOライブラリによって実行され、SQL 2005および2008の新しいオブジェクトタイプをサポートします。


うーん、64ビットのVistaにsmoアプリをインストールしました。インストールは成功したが、プログラムディレクトリまたは[すべてのプログラム]リストに項目が表示されない
PositiveGuy

3

最終的に、SSMSスクリプト生成の組み合わせを使用してスキーマとデータを抽出し、スクリプトでキーワードの解析とトークンベースの置換を可能にする独自のデータベースツールを使用しました。また、スクリプトが一度だけ適用されることも保証します。

どうして?

  • SQL Server 2000、2005、2008へのインストールをサポートする必要があり、バージョン間でデータタイプに変更があります。たとえば、2005 +はnvarchar(max)を持っていますが、2000はntextしかサポートしていません。したがって、スクリプトはトークンを使用し、dbの選択に基づいて正しいタイプに置き換えます。
  • 一部のスクリプトの実行には、実行後に待機期間が必要です。たとえば、スクリプトを介して新しいデータベースを作成した後、数秒待機しなかった場合、SQLサーバーが失敗することがあります(dbを作成する時間がなかったため)ファイルなど)テーブルを作成したときなど
  • どのスクリプトがいつ実行されたかの履歴を保持したかったのです。
  • Wix MSIインストーラーが接続文字列と資格情報を指定できるようにしたかったので、これらをスクリプトに渡すためのいくつかの方法が必要だったので、もう一度トークンといくつかの条件付きロジックを使用しました。

スクリプトの例(簡潔にするために編集)

-- Sleep: 5 
-- Sleep after creating database to allow file system to create db files
CREATE DATABASE [$Database$]
GO

EXEC sp_dbcmptlevel [$Database$], $CompatabilityLevel$
GO

USE [$Database$]
GO

IF '1'!='$IntegratedSecurity$'
BEGIN
    CREATE LOGIN [$Login$] WITH PASSWORD=N'$Password$', DEFAULT_DATABASE=[$Database$]
    CREATE USER [$User$] FOR LOGIN [$Login$]
    EXEC sp_addrolemember N'db_owner', N'$User$'
END
GO

1

RedGateのSQLパッケージャーを確認することをお勧めします。これは無料ではありませんが、価格に見合うだけの十分な価値があります。


1

テーブルデータを見るだけで、Management Studio 2012および2014ですべてのテーブルデータコンテンツを出力するために、それは少し隠されていますが、いくつか調べた後でオプションが見つかりました。

  1. dbを右クリック
  2. [タスク]> [スクリプトの生成...]を選択します
  3. [スクリプトオプションの設定]で、[詳細設定]をクリックします。
  4. 「一般」の下で、「スクリプトへのデータのタイプ」をtrueに設定します(「一般」グループの下部にあります)

0

プログラムで実行する必要がある場合は、SQL Server 2000に対してSQL DMOライブラリ(OLE)を使用できますが、SQL Server 2005以降に対してSQL SMOライブラリ(ネイティブ.NETライブラリ)を使用することもできます。

これらのライブラリはどちらも、SQL Server管理ツールのインストールに不可欠です。

これは、SQL Server Management Studioから完全なデータベーススクリプトを生成することが不十分な場合です。

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