Windowsコマンドプロンプトから、特定のデータベースのスキーマを.sqlファイルにスクリプト化できるようにしたいと考えています。基本的に、Management Studioの「スクリプトの生成」機能をプログラムで実行したいと思います。
これは.NETとSMOを使用して可能であることを知っていますが、これを行うために組み込みのものはありますか?
この質問の背景:これは、単純な監査手段として意図されています。毎晩スキーマをキャプチャしたいと考えています。原始的でローテクなソリューションなら何でもうまくいきます。
コマンドラインには何も組み込まれていません。
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()
これを行う SchemaZen という名前のオープンソースコマンドラインユーティリティを作成しました。これは、management studioからのスクリプト作成よりもはるかに高速で、出力はよりバージョン管理に適しています。スキーマとデータの両方のスクリプトをサポートします。
スクリプトを生成するには、以下を実行します。
schemazen.exeスクリプト--server localhost --database db --scriptDir c:\ somedir
次に、スクリプトからデータベースを再作成するには、次のコマンドを実行します。
schemazen.exe create --server localhost --database db --scriptDir c:\ somedir
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()}
_
実サーバーから見てください:
SQL Serverデータベース公開ウィザードを使用できます。
インストールしていない場合は、バージョン1.2を here から取得できます。
インストーラーはインストールされたことを示しませんが、コマンドウィンドウを開いて次の場所に移動すると、
C:\Program Files (x86)\Microsoft SQL Server\90\Tools\Publishing\1.2
SqlPubWiz.exe
があるはずです。
これを使用して、スキーマをスクリプト化できます。
タイプSqlPubWiz help script
コマンドウィンドウで、必要なオプションを提供します。