Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bagaimana saya bisa mengotomatiskan tugas menghasilkan skrip di SQL Server Management Studio 2008?

SqlPubwiz memiliki opsi yang sangat terbatas dibandingkan dengan pembuatan skrip di SSMS. Sebaliknya, opsi yang tersedia dengan SMO hampir sama persis dengan yang ada di SSMS, menunjukkan bahwa itu mungkin kode yang sama. (Saya berharap MS tidak menulisnya dua kali!) Ada beberapa contoh di MSDN seperti ini yang menunjukkan tabel skrip sebagai objek individual. Namun jika Anda ingin semuanya skrip dengan benar dengan skema 'penuh' yang menyertakan objek 'DRI' (Integritas Referensial Deklaratif) seperti kunci asing, maka tabel skrip secara individual tidak menyelesaikan dependensi dengan benar. Saya merasa perlu untuk mengumpulkan semua guci dan menyerahkannya ke scripter sebagai array. Kode ini, dimodifikasi dari contoh, berfungsi untuk saya (walaupun saya yakin Anda dapat merapikannya dan memberi komentar lebih banyak):

    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();


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Membatasi Baris dalam Kumpulan Hasil SQL Server

  2. Bagaimana Anda menerapkan urutan di Microsoft SQL Server?

  3. Contoh Pemformatan 'datetimeoffset' di SQL Server menggunakan String Format Standar (T-SQL)

  4. Cara Menginstal SQL Server di Windows

  5. memigrasikan data dari MS SQL ke PostgreSQL?