web-dev-qa-db-ja.com

バッチファイルからのSQL Serverデータベースのスクリプトの内容

Windowsコマンドプロンプトから、特定のデータベースのスキーマを.sqlファイルにスクリプト化できるようにしたいと考えています。基本的に、Management Studioの「スクリプトの生成」機能をプログラムで実行したいと思います。

これは.NETとSMOを使用して可能であることを知っていますが、これを行うために組み込みのものはありますか?

この質問の背景:これは、単純な監査手段として意図されています。毎晩スキーマをキャプチャしたいと考えています。原始的でローテクなソリューションなら何でもうまくいきます。

6
usr

コマンドラインには何も組み込まれていません。

Red Gate SQL Compareを使用している場合は、次のように実行できます。

sqlcompare /s1:MySQLInstance /db1:MyDB /mkscr:MyDB_Schema /q

SSMSスクリプト関数は、SMOの単なるラッパーです。私はあなたがそれを言及しているのを知っていますが、SMOを使用するためのpowershellスクリプトを書くことができます。

これは、この Simple Talk post にあるコードから適応されます。

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO")

$serverName = "MYSQLINSTANCE"
$databaseName = "MyDB"
$sqlServer = new-object("Microsoft.SqlServer.Management.Smo.Server") $serverName
$sqlDb = $sqlServer.Databases[$databasename]

$options = new-object ("Microsoft.SqlServer.Management.Smo.ScriptingOptions")
$options.ExtendedProperties = $true
$options.DRIAll = $true
$options.Indexes = $true
$options.Triggers = $true
$options.ScriptBatchTerminator = $true
$options.Filename = "c:\\script_folder\\mydb_schema.sql"
$options.IncludeHeaders = $true
$options.ToFileOnly = $true

$transfer = new-object ("Microsoft.SqlServer.Management.Smo.Transfer") $sqlDb
$transfer.options = $options
$transfer.ScriptTransfer()
5
squillman

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

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

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

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

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

squillman's の回答をフィードするには、これはSQLPSが実行できる機能のサンプルを表示することです...データベースの下の各「ディレクトリ」を参照して、_get-member -MemberType Method_ Script()を探しています。ほとんどのディレクトリにはそれがあると思います。

_
Add-PSSnapin *SQL*
# Note my hostname of the server is "SQLSERVER"
# To show object names to be scripted
dir SQLSERVER:\SQL\SQLSERVER\DEFAULT\Databases\JProCo\Tables | Select Name
$objects = dir SQLSERVER:\SQL\SQLSERVER\DEFAULT\Databases\JProCo\Tables
$objects | % {$_.Script()}
_

実サーバーから見てください: Screenshot from my test server

4
user507

SQL Serverデータベース公開ウィザードを使用できます。

インストールしていない場合は、バージョン1.2を here から取得できます。

インストーラーはインストールされたことを示しませんが、コマンドウィンドウを開いて次の場所に移動すると、

C:\Program Files (x86)\Microsoft SQL Server\90\Tools\Publishing\1.2SqlPubWiz.exeがあるはずです。

これを使用して、スキーマをスクリプト化できます。

タイプSqlPubWiz help scriptコマンドウィンドウで、必要なオプションを提供します。

3
codingbadger