usr*_*usr 6 sql-server command-line scripting smo
我希望能够从 Windows 命令提示符将给定数据库的架构脚本写入 .sql 文件。基本上,我想以编程方式执行 Management Studio 的“生成脚本”功能。
我知道使用 .NET 和 SMO 可以做到这一点,但是是否有内置的东西可以做到这一点?
这个问题的背景:这是一个简单的审计工具。我们希望每晚都捕获模式。任何原始的、低技术的解决方案都适合我们。
我编写了一个名为SchemaZen 的开源命令行实用程序来执行此操作。它比来自管理工作室的脚本要快得多,而且它的输出对版本控制更友好。它支持对模式和数据进行脚本编写。
要生成脚本,请运行:
schemazen.exe 脚本 --server localhost --database db --scriptDir c:\somedir
然后从脚本运行重新创建数据库:
schemazen.exe 创建 --server localhost --database db --scriptDir c:\somedir
命令行没有内置任何内容。
如果你有红门 SQL 比较,你可以这样做:
sqlcompare /s1:MySQLInstance /db1:MyDB /mkscr:MyDB_Schema /q
Run Code Online (Sandbox Code Playgroud)
SSMS 脚本函数只是 SMO 的包装器。我知道您提到了它,但是您可以编写一个 powershell 脚本来使用 SMO。
这是改编自这篇Simple Talk 帖子中的代码。
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO")
$serverName = "MYSQLINSTANCE"
$databaseName = "MyDB"
$sqlServer = new-object("Microsoft.SqlServer.Management.Smo.Server") $serverName
$sqlDb = $sqlServer.Databases[$databasename]
$options = new-object ("Microsoft.SqlServer.Management.Smo.ScriptingOptions")
$options.ExtendedProperties = $true
$options.DRIAll = $true
$options.Indexes = $true
$options.Triggers = $true
$options.ScriptBatchTerminator = $true
$options.Filename = "c:\\script_folder\\mydb_schema.sql"
$options.IncludeHeaders = $true
$options.ToFileOnly = $true
$transfer = new-object ("Microsoft.SqlServer.Management.Smo.Transfer") $sqlDb
$transfer.options = $options
$transfer.ScriptTransfer()
Run Code Online (Sandbox Code Playgroud)