Powershell SMO:此方法不支持脚本数据

时间:2016-07-29 09:49:32

标签: sql-server powershell smo

我想通过Powershell(与this question相关)为MSSQL DB生成导入脚本。 我试过这样做:

#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"

我也尝试设置输出文件选项,但这并没有改变任何内容。

你能告诉我我做错了吗?

谢谢!

1 个答案:

答案 0 :(得分:4)

根据错误,Scripter.Script不支持脚本数据。这是documented。没有记录的是您应该使用的内容,而是EnumScript

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

您必须传递表,因为简单地编写数据库脚本将不会产生任何结果(因为从技术上讲,数据库本身不包含任何数据,其表格不包含数据)。

@()强制将Tables集合转换为数组,因为这是EnumScript期望的内容。)