【问题标题】:Invoke SQL Script Wizard programmatically以编程方式调用 SQL 脚本向导
【发布时间】:2011-06-08 05:02:43
【问题描述】:

谁能告诉我是否有办法以编程方式或通过命令行调用 SQL 脚本向导?

这是一个很棒的部署工具,但我厌倦了每次使用它时都必须设置无数选项。

【问题讨论】:

    标签: sql tsql command-line command-line-arguments wizard


    【解决方案1】:

    SSMS 脚本向导只是Scripter SMO 对象功能的外壳。来自 MSDN 上的脚本示例:

    using System;
    using Microsoft.SqlServer.Management.Smo;
    using Microsoft.SqlServer.Management.Sdk.Sfc;
    
    
    public class A {
       public static void Main() { 
          String dbName = "AdventureWorksLT2008R2"; // database name
    
          // Connect to the local, default instance of SQL Server. 
          Server srv = new Server();
    
          // Reference the database.  
          Database db = srv.Databases[dbName];
    
          // Define a Scripter object and set the required scripting options. 
          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
    
          // Iterate through the tables in database and script each one. Display the script.   
          foreach (Table tb in db.Tables) { 
             // check if the table is not a system table
             if (tb.IsSystemObject == false) {
                Console.WriteLine("-- Scripting for table " + tb.Name);
    
                // Generating script for table tb
                System.Collections.Specialized.StringCollection sc = scrp.Script(new Urn[]{tb.Urn});
                foreach (string st in sc) {
                   Console.WriteLine(st);
                }
                Console.WriteLine("--");
             }
          } 
       }
    

    【讨论】:

    【解决方案2】:

    您应该在创建和更改表结构时自己编写脚本,它们应该在源代码控制中并与特定版本相关联。没有理由将数据库更改与任何其他代码进行任何不同的处理,并且永远不应该使用 GUI 进行数据库更改。

    【讨论】:

      猜你喜欢
      • 2011-04-28
      • 2010-11-14
      • 1970-01-01
      • 1970-01-01
      • 2011-05-28
      • 1970-01-01
      • 2016-04-19
      • 2018-04-17
      • 2011-09-18
      相关资源
      最近更新 更多