web-dev-qa-db-ja.com

スキーマとデータを含むデータベースを生成するSQL Server 2012 Powershellスクリプト

SQL Server 2012を使用して、誰かがとても親切で、データベース全体(スキーマとデータ)を生成する単純なpowershell 3スクリプトを見せてくれませんか?

私はこれを試しました:

$Filepath='d:\b\t' # local directory to save build-scripts to
$DataSource='HH' # server name and instance
$Database='HMovies'# the database to copy from
# set "Option Explicit" to catch subtle errors
set-psdebug -strict
$ErrorActionPreference = "stop" # you can opt to stagger on, bleeding, if an error occurs
# Load SMO Assembly, and if we're running SQL 2008 DLLs load the SMOExtended and SQLWMIManagement libraries
$ms='Microsoft.SqlServer'
$v = [System.Reflection.Assembly]::LoadWithPartialName( "$ms.SMO")
if ((($v.FullName.Split(','))[1].Split('='))[1].Split('.')[0] -ne '9') {
[System.Reflection.Assembly]::LoadWithPartialName("$ms.SMOExtended") | out-null
   }
$My="$ms.Management.Smo" #
$s = new-object ("$My.Server") $DataSource
if ($s.Version -eq  $null ){Throw "Can't find the instance $Datasource"}
$db= $s.Databases[$Database]
if ($db.name -ne $Database){Throw "Can't find the database '$Database' in $Datasource"};
$transfer = new-object ("$My.Transfer") $db
$transfer.Options.ScriptBatchTerminator = $true # this only goes to the file
$transfer.Options.ToFileOnly = $true # this only goes to the file
$transfer.Options.ScriptData = $true;
$transfer.Options.Filename = "$($FilePath)\$($Database)_Build.sql";
$transfer.ScriptTransfer()
"All done"

しかしエラーが出ます

Exception calling "ScriptTransfer" with "0" argument(s): "This method does not support scripting data."

ScriptDataオプションを無効にすると機能しますが、もちろんスキーマしか取得できません。私は何時間もグーグルで検索しましたが、この単純なタスクを実行する単純なスクリプト(ストアドプロシージャなどの口笛はありません)が見つかりません。

私の時間がなくなっています。助けてください。

3
Harald

Powershellを使用して小さなデータベースをスクリプト化し、gitでの変更を追跡できるようにしたいと思っていました。あなたが出発点として使用したのと同じスクリプトを見つけました: PowershellとSMOを使用した自動スクリプト生成

ScriptingOptionsクラスのすべてのオプションは、次の場所にあります。 ScriptingOptions Class

廃止されたScriptTransferメソッドが原因でエラーが発生します。

この行を置き換える

$transfer.ScriptTransfer()

これとともに

$transfer.EnumScriptTransfer()

スクリプトが実行されます。

5