2016-07-29 56 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但没有模式我得到这个错误。有没有办法只是脚本的数据?我需要以不与外键冲突的方式排列表格。目前这些表格是按字母顺序编写的,但是当将它们导入空数据库时会引发错误... –