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

C.M*_*.M. 0 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.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)
Run Code Online (Sandbox Code Playgroud)

但执行此操作会引发错误:

"This method does not support scripting data"
Run Code Online (Sandbox Code Playgroud)

我还尝试设置输出文件选项,但这不会改变任何内容。

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

谢谢!

Jer*_*ert 5

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

$scripter.EnumScript(@($db.Tables))
Run Code Online (Sandbox Code Playgroud)

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

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