繁体   English   中英

如何在 SQL Server Management Studio 2008 中自动执行“生成脚本”任务?

[英]How can I automate the “generate scripts” task in SQL Server Management Studio 2008?

我想在 SQL Server Management Studio 2008 中自动生成脚本。

现在我做的是:

  • 右键单击我的数据库,任务,“生成脚本...”
  • 手动选择我需要的所有导出选项,然后在“选择对象”选项卡上点击全选
  • 选择导出文件夹
  • 最终点击“完成”按钮

有没有办法自动化这个任务?

编辑:我想生成创建脚本,而不是更改脚本。

与 SSMS 中的脚本生成相比,SqlPubwiz 的选项非常有限。 相比之下, SMO可用的选项几乎与 SSMS 中的选项完全匹配,这表明它甚至可能是相同的代码。 (我希望MS没写两次!)有MSDN上几个例子像这一次,显示脚本表作为单独的对象。 但是,如果您希望所有内容都使用包含“DRI”(声明性引用完整性)对象(如外键)的“完整”模式正确编写脚本,则单独编写表的脚本无法正确处理依赖项。 我发现有必要收集所有 URN 并将它们作为数组交给脚本编写者。 这段从示例中修改的代码对我有用(虽然我敢说你可以整理一下并多加评论):

    using Microsoft.SqlServer.Management.Smo;
    using Microsoft.SqlServer.Management.Sdk.Sfc;
    // etc...

    // Connect to the local, default instance of SQL Server. 
    Server srv = new Server();

    // Reference the database.  
    Database db = srv.Databases["YOURDBHERE"];

    Scripter scrp = new Scripter(srv);
    scrp.Options.ScriptDrops = false;
    scrp.Options.WithDependencies = true;
    scrp.Options.Indexes = true;   // To include indexes
    scrp.Options.DriAllConstraints = true;   // to include referential constraints in the script
    scrp.Options.Triggers = true;
    scrp.Options.FullTextIndexes = true;
    scrp.Options.NoCollation = false;
    scrp.Options.Bindings = true;
    scrp.Options.IncludeIfNotExists = false;
    scrp.Options.ScriptBatchTerminator = true;
    scrp.Options.ExtendedProperties = true;

    scrp.PrefetchObjects = true; // some sources suggest this may speed things up

    var urns = new List<Urn>();

    // Iterate through the tables in database and script each one   
    foreach (Table tb in db.Tables)
    {
        // check if the table is not a system table
        if (tb.IsSystemObject == false)
        {
            urns.Add(tb.Urn);
        }
    }

    // Iterate through the views in database and script each one. Display the script.   
    foreach (View view in db.Views)
    {
        // check if the view is not a system object
        if (view.IsSystemObject == false)
        {
            urns.Add(view.Urn);
        }
    }

    // Iterate through the stored procedures in database and script each one. Display the script.   
    foreach (StoredProcedure sp in db.StoredProcedures)
    {
        // check if the procedure is not a system object
        if (sp.IsSystemObject == false)
        {
            urns.Add(sp.Urn);
        }
    }

    StringBuilder builder = new StringBuilder();
    System.Collections.Specialized.StringCollection sc = scrp.Script(urns.ToArray());
    foreach (string st in sc)
    {
        // It seems each string is a sensible batch, and putting GO after it makes it work in tools like SSMS.
        // Wrapping each string in an 'exec' statement would work better if using SqlCommand to run the script.
        builder.AppendLine(st);
        builder.AppendLine("GO");
    }

    return builder.ToString();

Brann 在 Visual Studio 2008 SP1 Team Suite 中提到的是数据库发布向导的 1.4 版。 它随 sql server 2008(可能只是专业版?)一起安装到 \\Program Files\\Microsoft SQL Server\\90\\Tools\\Publishing\\1.4。 来自服务器资源管理器的 VS 调用只是调用它。 您可以通过命令行实现相同的功能,例如:

sqlpubwiz help script

我不知道 v1.4 是否和 v1.1 有同样的问题(用户被转换为角色,约束没有按正确的顺序创建),但这对我来说不是一个解决方案,因为它没有脚本对象到不同的文件,如 SSMS 中的 Tasks->Generate Scripts 选项。 我目前正在使用 Scriptio 的修改版本(使用 MS SMO API)作为数据库发布向导 (sqlpubwiz.exe) 的改进替代品。 目前无法从命令行编写脚本,我可能会在未来添加该贡献。

Scriptio 最初发布在 Bill Graziano 的博客上,但随后由 Bill 发布到 CodePlex 并由其他人更新。 阅读讨论以了解如何编译以用于 SQL Server 2008。

http://scriptio.codeplex.com/

编辑:我已经开始使用 RedGate 的 SQL 比较产品来做到这一点。 它是 sql 发布向导本应具备的所有功能的非常好的替代品。 您选择一个数据库、备份或快照作为源,并选择一个文件夹作为输出位置,它会将所有内容很好地转储到文件夹结构中。 它恰好与他们的其他产品 SQL Source Control 使用的格式相同。

我编写了一个名为SchemaZen 的开源命令行实用程序来执行此操作。 它比来自管理工作室的脚本要快得多,而且它的输出对版本控制更友好。 它支持对模式和数据进行脚本编写。

要生成脚本,请运行:

schemazen.exe script --server localhost --database db --scriptDir c:\somedir

然后从脚本运行重新创建数据库:

schemazen.exe create --server localhost --database db --scriptDir c:\somedir

您可以使用 SQL Server 管理对象 (SMO) 自动执行 SQL Server 2005 管理任务,包括生成脚本: http://msdn.microsoft.com/en-us/library/ms162169.aspx

如果您是开发人员,请务必使用 SMO。 这是 Scripter 类的链接,这是您的起点:

脚本类

我没有看到这些答案中提到的带有 SQLPSX 的 powershell ......我个人没有玩过它,但它看起来非常简单易用,非常适合此类自动化任务,任务如下:

Get-SqlDatabase -dbname test -sqlserver server | Get-SqlTable | Get-SqlScripter | Set-Content -Path C:\script.sql
Get-SqlDatabase -dbname test -sqlserver server | Get-SqlStoredProcedure | Get-SqlScripter
Get-SqlDatabase -dbname test -sqlserver server | Get-SqlView | Get-SqlScripter

(参考: http : //www.sqlservercentral.com/Forums/Topic1167710-1550-1.aspx#bm1168100

项目页面: http : //sqlpsx.codeplex.com/

这种方法的主要优点是它结合了直接使用 SMO 的可配置性/可定制性,以及使用简单的现有工具(如数据库发布向导)的便利性和可维护性。

在“工具”>“选项”>“设计器”>“表和数据库设计器”中,有一个“自动生成更改脚本”选项,该选项将为您在保存时所做的每个更改生成一个。

您可以通过使用 INFORMATION_SCHEMA 表的 T-SQL 代码来完成。

还有第三方工具 - 我喜欢 Apex SQL Script 正是因为您正在谈论的用途。 我完全从命令行运行它。

如果您想要 Microsoft 解决方案,您可以尝试:Microsoft SQL Server Database Publishing Wizard 1.1

http://www.microsoft.com/downloads/details.aspx?FamilyId=56E5B1C5-BF17-42E0-A410-371A838E570A&displaylang=en

它创建了一个批处理,您可以在需要重建脚本的任何时候运行。

尝试新的 SQL Server 命令行工具来生成 T-SQL 脚本并监控动态管理视图。

像魅力一样为我工作。 它是来自 Microsoft 的一个新的基于 Python 的工具,可从命令行运行。 一切都像 Microsoft 页面上描述的一样(见下面的链接) 使用 SQL 2012 服务器为我工作。

你用 pip 安装它:

$pip 安装 mssql 脚本程序

命令参数概览照常使用 h 寻求帮助:

mssql 脚本程序 -h

提示:如果您通过 Windows 身份验证登录 SQL-Server,只需留下用户名和密码。

https://cloudblogs.microsoft.com/sqlserver/2017/05/17/try-new-sql-server-command-line-tools-to-generate-t-sql-scripts-and-monitor-dynamic-management-观看次数/

我一直在使用 DB 比较器 - 它是免费的,没有大惊小怪的整个 DB 脚本,可以与另一个 DB 进行比较,还可以生成一个 Diff 脚本。 非常适合开发到生产更改脚本。 http://www.dbcomparer.com/

我还根据自己的需要构建了这个简单的命令行工具。
http://mycodepad.wordpress.com/2013/11/18/export-ms-sql-database-schema-with-c/

它可以导出整个数据库,并尝试导出加密对象。 一切都存储在文件夹和单独的 sql 文件中,以便于文件比较。

代码也可以在 github 上找到。

我正在使用 VS 2012(用于 MSSQL Server 2008 上的数据库)比较数据库有一个选项来保存它,比较和选项。 这基本上是您的交付设置。 之后,您可以进行更新或生成脚本。

我只是觉得稍后从文件加载它有点尴尬(从 Windows 资源管理器拖放),因为我没有在解决方案资源管理器中看到该文件。

从 Visual Studio 2008 SP1 TeamSuite :

在服务器资源管理器/数据连接选项卡中,有一个发布到提供程序工具,它​​的作用与“Microsoft SQL Server 数据库发布向导”相同,但与 MS Sql Server 2008 兼容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM