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

Sql server Powershell SMO:此方法不支持脚本数据,sql-server,powershell,smo,Sql Server,Powershell,Smo,我想通过Powershell(与相关)为MSSQL DB生成导入脚本。 我试着这样做: #Set-ExecutionPolicy RemoteSigned $DB_NAME = "<<dbName>>" [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") | Out-Null $srv = new-object "Microsoft.SqlServer.Manage

我想通过Powershell(与相关)为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)
我还尝试设置输出文件选项,但这并没有改变任何事情

你能告诉我我做错了什么吗


谢谢

根据错误,
Scripter.Script
不支持脚本数据。这是。未记录的内容是您应该使用的内容,但它是:

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


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

根据错误,
Scripter.Script
不支持脚本数据。这是。未记录的内容是您应该使用的内容,但它是:

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


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

您好,谢谢您的精彩回答!这听起来好像可以解决我的问题。不幸的是,现在我得到了这个错误:Ausnahme beim Aufrufen von“EnumScript”mit 1参数(en):“服务器'xxx'的脚本失败。”$scripter.EnumScript(@($db.Tables))+~~~~~~~~~~~~~~+CategoryInfo:NotSpecified:(:)[],MethodInvocationException+FullyQualifiedErrorId:FailedOperationException您知道导致此异常的原因吗?问候语!不,它与
EnumScript
本身无关——我知道,因为我验证了此代码对可访问的数据库实例有效。您好,我找到了错误所在:我想使用设置$scripter.Options.ScriptSchema=$false,但没有架构,我会出现此错误。有没有办法只编写数据脚本?我需要以一种不会与外键冲突的方式对表进行排序。目前,这些表是按字母顺序编写的,但当将它们导入空数据库时,这会引发错误…@C.M.听起来你还有一些问题。。。请随意张贴。评论不是这样做的。您可能希望将问题变得更一般,以防止所有内容转移到单个调试会话中。+1,非常有用,将
Script()
替换为
EnumScript()
允许使用数据。您好,谢谢您的精彩回答!这听起来好像可以解决我的问题。不幸的是,现在我得到了这个错误:Ausnahme beim Aufrufen von“EnumScript”mit 1参数(en):“服务器'xxx'的脚本失败。”$scripter.EnumScript(@($db.Tables))+~~~~~~~~~~~~~~+CategoryInfo:NotSpecified:(:)[],MethodInvocationException+FullyQualifiedErrorId:FailedOperationException您知道导致此异常的原因吗?问候语!不,它与
EnumScript
本身无关——我知道,因为我验证了此代码对可访问的数据库实例有效。您好,我找到了错误所在:我想使用设置$scripter.Options.ScriptSchema=$false,但没有架构,我会出现此错误。有没有办法只编写数据脚本?我需要以一种不会与外键冲突的方式对表进行排序。目前,这些表是按字母顺序编写的,但当将它们导入空数据库时,这会引发错误…@C.M.听起来你还有一些问题。。。请随意张贴。评论不是这样做的。您可能希望将问题变得更一般,以防止所有内容都转移到单个调试会话中。+1,非常有用,将
Script()
替换为
EnumScript()
允许使用数据。
"This method does not support scripting data"
$scripter.EnumScript(@($db.Tables))