我想通过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"
我也尝试设置输出文件选项,但这并没有改变任何内容。
你能告诉我我做错了吗?
谢谢!
答案 0 :(得分:4)
根据错误,Scripter.Script
不支持脚本数据。这是documented。没有记录的是您应该使用的内容,而是EnumScript
:
$scripter.EnumScript(@($db.Tables))
您必须传递表,因为简单地编写数据库脚本将不会产生任何结果(因为从技术上讲,数据库本身不包含任何数据,其表格不包含数据)。
(@()
强制将Tables
集合转换为数组,因为这是EnumScript
期望的内容。)