2016-07-29 29 views
0

Powershell経由でMSSQL DB用のインポートスクリプトを生成します(this questionに関連しています)。 私はこれをやってみました:Powershell SMO:このメソッドはスクリプトデータをサポートしていません

#Set-ExecutionPolicy RemoteSigned 

$DB_NAME = "<<dbName>>" 

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") | Out-Null 

$srv = new-object "Microsoft.SqlServer.Management.SMO.Server" "<<server>>" 
$conContext = $srv.ConnectionContext 
$conContext.LoginSecure = $false 
$conContext.Login = "<<user>>" 
$conContext.Password = "<<password>>" 
$srv = new-object Microsoft.SqlServer.Management.Smo.Server($conContext) 
$srv.SetDefaultInitFields([Microsoft.SqlServer.Management.SMO.View], "IsSystemObject") 

$db = $srv.databases[$DB_NAME] 

$scripter = new-object "Microsoft.SqlServer.Management.Smo.Scripter" $srv 

$scripter.Options.ScriptSchema = $false 
$scripter.Options.ScriptData = $true 
$scripter.Options.ScriptDrops = $false 

$scripter.Script($db) 

しかし、これはエラーをスロー実行:

"This method does not support scripting data" 

私も、出力ファイルのオプションを設定しようとしたが、これは何も変わりません。

私が間違ったことを教えてもらえますか?

ありがとうございます!

答えて

2

エラーごとに、Scripter.Scriptはスクリプトデータをサポートしていません。これはdocumentedです。どのような文書化されていないことは、あなたが代わりに使用することになっているものであるが、それはEnumScriptです:

$scripter.EnumScript(@($db.Tables)) 

あなたは単に、技術的には、データベース自体がありませんが含まれているとして、(何も得られないだろうデータベースをスクリプトするので、テーブルを渡す必要がありますデータ、そのテーブルが行う)。

(それが何を期待EnumScriptだから@()を強制的に、配列にTablesコレクションを変換します。)

+0

こんにちは、あなたの偉大な答えてくれてありがとう!これは私の問題を解決できるように聞こえる。残念ながら今私はこのエラーが表示されます: "EnumScript" 1引数(En): "スクリプトはサーバー 'xxx'に失敗しました。" ... + $ scripter.EnumScript(@($ db.Tables) ) + ~~~~~~~~~~~ + CategoryInfo:NotSpecified:(:) []、MethodInvocationException + FullyQualifiedErrorId:FailedOperationExceptionこの例外の原因を知っていますか?ご挨拶! –

+0

いいえ、 'EnumScript'自体とは何の関係もありません - このコードを検証したため、到達可能なデータベースインスタンスに対して動作します。 –

+0

こんにちは - 私は何がうまくいかなかったかfugured:私は$ scripter.Options.ScriptSchema = $ falseを設定するために使用したいが、私はこのエラーが発生するスキーマなし。データをスクリプト化する方法はありますか?そして、私は外部キーとの競合がないようにテーブルを注文する必要があります。現在、テーブルはアルファベット順にスクリプト化されていますが、空のDBにインポートするとエラーが発生します。 –

関連する問題