SQL Server 2014,标准版
多年来,我们已经看到并使用了各种存储过程和非 MS 工具来导出数据库模式。
我们真正喜欢这样做的方式是 SSMS 中的内置实用程序,如此处所述:https ://stackoverflow.com/a/12036513/147637
我们强烈喜欢 MS 工具,因为它比手动工具更完整,并且提供超级干净、组织良好和结构化的输出。
但是,我们希望将其自动化。
如何以编程方式驱动 MS 引擎?
SQL Server 2014,标准版
多年来,我们已经看到并使用了各种存储过程和非 MS 工具来导出数据库模式。
我们真正喜欢这样做的方式是 SSMS 中的内置实用程序,如此处所述:https ://stackoverflow.com/a/12036513/147637
我们强烈喜欢 MS 工具,因为它比手动工具更完整,并且提供超级干净、组织良好和结构化的输出。
但是,我们希望将其自动化。
如何以编程方式驱动 MS 引擎?
这些天来,到目前为止,最好的方法是开源和微软(我们生活的世界):
mssql 脚本程序
自述文件说明了一切,所以我将引用它:
对于自动化,您可能最好使用SQL Server 管理对象 (SMO)。它需要做一些编程,但它是为轻松导航数据库/SQL结构而设计的。许多人使用它来生成这样的脚本。
SSMS 不是为自动化而设计的。即使您可以让它以某种自动化的方式完成其中的一部分,您也可能无法保证这些配置设置在计算机甚至同一台计算机上的用户之间保持一致。但是通过使用 SMO(上面提到的),您可以完全控制它并且可以轻松地自动化它,并且可以通过硬编码设置来配置它,或者通过将一些/所有设置放在 app.config 文件中使其更加灵活。
编程 SMO 的一些示例是:
这可以通过 SMO 对象来完成。下面是一个使用 C# 的示例。这使用表,但可以通过将
Table
对象更改为View
、StoredProcedure
或您想要编写脚本的任何其他对象来为视图、存储过程等完成。您可以使用该Name
属性按名称过滤,如下面的评论所示。另一种选择是仅获取名称以特定文本开头的对象的String.StartsWith
方法,即. DDL 被写入可以执行或用于其他目的的 .sql 文件。如果要自动执行此操作,请创建一个包含带有此代码的脚本任务的 SSIS 包。然后,您可以使用 SQL 代理安排程序包作为作业运行。对、和dll的引用也是必要的。Name
Name.StartsWith("Prefix")
Microsoft.SqlServer.Smo
Microsoft.SqlServer.Management.Sdk.Sfc
Microsoft.SqlServer.ConnectionInfo