sql-server – 如何使用SMO脚本程序生成sql脚本

前端之家收集整理的这篇文章主要介绍了sql-server – 如何使用SMO脚本程序生成sql脚本前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的数据库有表格,视图和所有.我需要一种以自动方式为所有DDL生成sql脚本的方法.不需要数据.

存在FK约束,因此应该正确地排序表创建脚本.某些视图使用另一个视图,因此还必须正确排序视图创建脚本.

MSDN Blog上提供的脚本开始,我得到以下内容

@H_403_6@function Generate-sqlScript { param( [string]$srvname,[string]$database,[string]$ScriptOutputFileName ) [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.sqlServer.SMO") | out-null $srv = New-Object ("Microsoft.sqlServer.Management.SMO.Server") ($srvname) $allUrns = @() $allUrns += $srv.Databases[$database].Tables | foreach { $_.Urn} $allUrns += $srv.Databases[$database].Views | foreach { $_.Urn} $scriptingOptions = New-Object ("Microsoft.sqlServer.Management.SMO.ScriptingOptions") $scriptingOptions.WithDependencies = $true $scriptingOptions.AllowSystemObjects = $false $scriptingOptions.ToFileOnly = $true $scriptingOptions.Permissions = $true $scriptingOptions.FileName = "$ScriptOutputFileName" $scripter = New-Object ("Microsoft.sqlServer.Management.SMO.Scripter") ($srv) $scripter.Options = $scriptingOptions; $scripter.Script($allUrns) } Generate-sqlScript .\sqlexpress <MyDbName> <FilePath>

现在问题是,WithDependencies选项导致视图脚本包含其先前已包含的依赖表.如果我取出WithDependencies选项,生成的脚本不会反映正确的顺序.

所以最终结果包含所有信息,但它不可运行.它会引发错误,因为它无法创建表两次.

我发现有太多帖子谈论SMO脚本编写器,所以我认为必须有一些我错过的东西.或者……所有这些帖子都错过了这个问题吗?

@H_404_14@

解决方法

在编写对象脚本之前,需要在PowerShell脚本中按依赖顺序发现和排序表.在以下博客中查看此实现:
http://patlau.blogspot.com/2012/09/generate-sqlserver-scripts-with.html

在C#中,这个概念对我来说更清晰.查看:
http://sqlblog.com/blogs/ben_miller/archive/2007/10/18/scripting-tables-views-and-data-using-smo-part-3.aspx

@H_404_14@ @H_404_14@

猜你在找的MsSQL相关文章