SQL Server Management Studio 2008でスクリプト生成を自動化したいのですが。
今私がしていることは:
- データベース、タスク、「スクリプトの生成...」を右クリックします。
- 必要なすべてのエクスポートオプションを手動で選択し、[オブジェクトの選択]タブで[すべて選択]をクリックします
- エクスポートフォルダを選択します
- 最終的に「完了」ボタンを押します
このタスクを自動化する方法はありますか?
編集:変更スクリプトではなく、作成スクリプトを生成したい。
SQL Server Management Studio 2008でスクリプト生成を自動化したいのですが。
今私がしていることは:
このタスクを自動化する方法はありますか?
編集:変更スクリプトではなく、作成スクリプトを生成したい。
回答:
BrannがVisual Studio 2008 SP1チームスイートから言及しているのは、データベース公開ウィザードのバージョン1.4です。SQL Server 2008と一緒にインストールされます(おそらくプロフェッショナルのみですか?)。\ Program Files \ Microsoft SQL Server \ 90 \ Tools \ Publishing \ 1.4にインストールされます。サーバーエクスプローラーからのVS呼び出しは、単にこれを呼び出しています。次のようなコマンドラインを使用して同じ機能を実現できます。
sqlpubwiz help script
v1.4にv1.1と同じ問題があるかどうかはわかりません(ユーザーがロールに変換され、制約が正しい順序で作成されません)。オブジェクトをスクリプト化しないため、私にとっては解決策ではありませんSSMSのTasks-> Generate Scriptsオプションのように別のファイルに。私は現在、データベース公開ウィザード(sqlpubwiz.exe)の改善された代替品として機能するように修正されたバージョンのScriptio(MS SMO APIを使用)を使用しています。現在、コマンドラインからスクリプトを実行することはできません。将来的には、この機能を追加する可能性があります。
ScriptioはもともとBill Grazianoのブログに投稿されていましたが、その後BillによってCodePlexにリリースされ、他のユーザーによって更新されました。SQL Server 2008で使用するためにコンパイルする方法については、ディスカッションを読んでください。
編集:RedGateのSQL Compare製品を使用してこれを開始しました。これは、SQLパブリッシングウィザードのすべてを置き換える非常に優れた方法です。ソースとしてデータベース、バックアップ、またはスナップショットを選択し、出力場所としてフォルダーを選択すると、すべてがフォルダー構造に適切にダンプされます。これは、他の製品であるSQLソース管理が使用する形式と同じです。
SqlPubwizには、SSMSでのスクリプト生成と比較して非常に限られたオプションがあります。対照的に、SMOで使用できるオプションはSSMS のオプションとほぼ完全に一致しており、おそらく同じコードでさえあります。(MSが2度書いていないことを願っています!)このようなMSDNには、スクリプトテーブルを個別のオブジェクトとして表示する例がいくつかあります。ただし、外部キーなどの「DRI」(宣言的参照整合性)オブジェクトを含む「完全」スキーマですべてを正しくスクリプト化したい場合は、テーブルを個別にスクリプト化しても、依存関係が正しく機能しません。すべてのURNを収集して配列としてスクリプト作成者に渡すことが必要であることがわかりました。例から変更されたこのコードは、
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Sdk.Sfc;
// etc...
// Connect to the local, default instance of SQL Server.
Server srv = new Server();
// Reference the database.
Database db = srv.Databases["YOURDBHERE"];
Scripter scrp = new Scripter(srv);
scrp.Options.ScriptDrops = false;
scrp.Options.WithDependencies = true;
scrp.Options.Indexes = true; // To include indexes
scrp.Options.DriAllConstraints = true; // to include referential constraints in the script
scrp.Options.Triggers = true;
scrp.Options.FullTextIndexes = true;
scrp.Options.NoCollation = false;
scrp.Options.Bindings = true;
scrp.Options.IncludeIfNotExists = false;
scrp.Options.ScriptBatchTerminator = true;
scrp.Options.ExtendedProperties = true;
scrp.PrefetchObjects = true; // some sources suggest this may speed things up
var urns = new List<Urn>();
// Iterate through the tables in database and script each one
foreach (Table tb in db.Tables)
{
// check if the table is not a system table
if (tb.IsSystemObject == false)
{
urns.Add(tb.Urn);
}
}
// Iterate through the views in database and script each one. Display the script.
foreach (View view in db.Views)
{
// check if the view is not a system object
if (view.IsSystemObject == false)
{
urns.Add(view.Urn);
}
}
// Iterate through the stored procedures in database and script each one. Display the script.
foreach (StoredProcedure sp in db.StoredProcedures)
{
// check if the procedure is not a system object
if (sp.IsSystemObject == false)
{
urns.Add(sp.Urn);
}
}
StringBuilder builder = new StringBuilder();
System.Collections.Specialized.StringCollection sc = scrp.Script(urns.ToArray());
foreach (string st in sc)
{
// It seems each string is a sensible batch, and putting GO after it makes it work in tools like SSMS.
// Wrapping each string in an 'exec' statement would work better if using SqlCommand to run the script.
builder.AppendLine(st);
builder.AppendLine("GO");
}
return builder.ToString();
Microsoft.SqlServer.Management.SqlScriptPublish.ScriptPublishWizard
アセンブリC:\ Program Files(x86)\ Microsoft SQL Server \ 110 \ Tools \ Binn \ ManagementStudio \ Microsoft.SqlServer.Management.SqlScriptPublishUI.dllからクラスを確認できます。これはSSMSが使用するものです。(または、Microsoft.SqlServer.Management.UI.GenerateScript
アセンブリC:\ Program Files(x86)\ Microsoft SQL Server \ 110 \ Tools \ Binn \ ManagementStudio \ ReplicationDialog.dllからクラスを確認することもできます。)
SchemaZenという名前のオープンソースのコマンドラインユーティリティを作成しましたというを作成しました。これは、management studioからのスクリプト作成よりもはるかに高速で、出力はバージョン管理に対応しています。スキーマとデータの両方のスクリプトをサポートします。
スクリプトを生成するには、以下を実行します。
schemazen.exeスクリプト--server localhost --database db --scriptDir c:\ somedir
次に、スクリプトからデータベースを再作成するには、次のコマンドを実行します。
schemazen.exe create --server localhost --database db --scriptDir c:\ somedir
SQL Server管理オブジェクト(SMO)を使用して、スクリプトの生成を含むSQL Server 2005管理タスクを自動化できます。 http://msdn.microsoft.com/en-us/library/ms162169.aspx。
あなたが開発者なら、間違いなくSMOを使ってください。以下は、開始点であるScripterクラスへのリンクです。
SQLPSXを使用したpowershellがこれらの回答のいずれにも記載されていません...私は個人的には使ったことはありませんが、見た目はシンプルで、この種の自動化タスクに最適で、次のようなタスクがあります。
Get-SqlDatabase -dbname test -sqlserver server | Get-SqlTable | Get-SqlScripter | Set-Content -Path C:\script.sql
Get-SqlDatabase -dbname test -sqlserver server | Get-SqlStoredProcedure | Get-SqlScripter
Get-SqlDatabase -dbname test -sqlserver server | Get-SqlView | Get-SqlScripter
(参照:http : //www.sqlservercentral.com/Forums/Topic1167710-1550-1.aspx#bm1168100)
プロジェクトページ:http : //sqlpsx.codeplex.com/
このアプローチの主な利点は、SMOを直接使用する場合の構成可能性/カスタマイズ可能性と、データベース公開ウィザードなどの単純な既存のツールを使用する場合の利便性と保守性が組み合わされていることです。
新しいSQL Serverコマンドラインツールを試してT-SQLスクリプトを生成する、動的管理ビューを監視し。
魅力のように私のために働いた。これは、コマンドラインから実行されるMicrosoftの新しいpythonベースのツールです。Microsoftのページで説明されているようにすべてが機能します(下のリンクを参照)SQL 2012サーバーで私のために働いた。
あなたはそれをpipでインストールします:
$ pip mssql-scripterをインストール
通常のコマンドパラメータの概要とヘルプのh:
mssql-scripter -h
ヒント:Windows認証を介してSQL-Serverにログインする場合は、ユーザー名とパスワードを残してください。
Microsoftのソリューションが必要な場合は、Microsoft SQL Serverデータベース公開ウィザード1.1を試してください。
スクリプトを再構築する必要があるときにいつでも実行できるバッチプロセスを作成します。
私はDB Comparerを使用しています-DB全体を無料で大騒ぎしないスクリプトで、別のDBと比較してDiffスクリプトを生成することもできます。開発から本番への変更スクリプトに最適です。 http://www.dbcomparer.com/
私のニーズに合わせて作成した、この簡単なコマンドラインツールもあります。
http://mycodepad.wordpress.com/2013/11/18/export-ms-sql-database-schema-with-c/
データベース全体をエクスポートでき、暗号化されたオブジェクトをエクスポートしようとします。すべてを簡単にファイル比較できるように、フォルダーと個別のSQLファイルに保存されます。
コードはgithubでも入手できます。
Visual Studio 2008 SP1 TeamSuiteから:
サーバーエクスプローラー/データ接続タブには、「Microsoft SQL Serverデータベース公開ウィザード」と同じように機能するが、MS SQL Server 2008と互換性のあるプロバイダーへの公開ツールがあります。