2016-07-29 54 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)) 

你必須通過的表,因爲只需編寫腳本的數據庫將產生什麼(如,從技術上講,數據庫本身不包含數據,它的表格)。

(該@()強行Tables集合轉換成一個陣列,因爲這就是EnumScript期待。)

+0

你好,感謝你的偉大的答案!這聽起來像可以解決我的問題。不幸的是,現在我得到這個錯誤:Ausnahme beim Aufrufen von「EnumScript」mit 1 Argument(en):「Script'failed for Server'xxx'。」 In ... + $ scripter.EnumScript(@($ db.Tables) ) + ~~~~~~~~~~ + CategoryInfo:NotSpecified:(:) [],MethodInvocationException + FullyQualifiedErrorId:FailedOperationException您是否知道是什麼原因導致此異常?問候! –

+0

不,它與'EnumScript'本身無關 - 我知道,因爲我驗證了這個代碼對可訪問的數據庫實例有效。 –

+0

嗨 - 我想出了什麼錯了:我想用來設置$ scripter.Options.ScriptSchema = $ false但沒有模式我得到這個錯誤。有沒有辦法只是腳本的數據?我需要以不與外鍵衝突的方式排列表格。目前這些表格是按字母順序編寫的,但是當將它們導入空數據庫時會引發錯誤... –