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)
我还尝试设置输出文件选项,但这不会改变任何内容。
你能告诉我我做错了什么吗?
谢谢!
根据错误,Scripter.Script不支持脚本数据。这是有记录的。没有记录的是您应该使用的内容,但它是EnumScript:
$scripter.EnumScript(@($db.Tables))
Run Code Online (Sandbox Code Playgroud)
您必须传递表,因为简单地编写数据库脚本不会产生任何结果(因为从技术上讲,数据库本身不包含数据,但它的表包含数据)。
(@()强制将集合转换Tables为数组,因为这是所EnumScript期望的。)
| 归档时间: |
|
| 查看次数: |
1611 次 |
| 最近记录: |