用SMO(sql server management object)產生建立表的指令碼

來源:互聯網
上載者:User

我本人是做C# winform 開發的。

最近接觸一個任務。要根據SQL裡一個現有的表產生建立這個表的指令碼。

先是想從預存程序的角度解決問題

在網上看了一些資料,發現MSSQL本身沒有這個功能,要自己去寫。

而其他的資料庫物件(視圖,預存程序,觸發器)則可以通過 SPHelp_Text來解決。

查一些資料無果後,決定自己研究一下。

看了一下SQL的聯機文檔 ,發現有SMO開發的方式。

如果要產生指令碼,需要的引用 為

C:\Program Files (x86)\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.ConnectionInfo.dll

C:\Program Files (x86)\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.Management.Sdk.Sfc.dll

C:\Program Files (x86)\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.Smo.dll

C:\Program Files (x86)\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.SmoExtended.dll

C:\Program Files (x86)\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.SqlEnum.dll

 

下面做一個拋磚引玉,貼一下產生指令碼的源碼

 

代碼

 
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;
using System.Collections.Specialized;

namespace geyunfei
{
    class Program
    {
        static void Main(string[] args)
        {

            //初始化一個串連 
            Server server = new Server(new ServerConnection(
                "localhost", "sa", ""));
            //得到資料庫
            var srcDb = server.Databases["TestDB"];
            //得到表
            Table table = srcDb.Tables["Table1"];

 

          
            //初始化Scripter 
            Scripter a = new Scripter();
            a.Options.Add(ScriptOption.DriAllConstraints);
            a.Options.Add(ScriptOption.DriAllKeys);
            a.Options.Add(ScriptOption.Default);
            a.Options.Add(ScriptOption.ContinueScriptingOnError);
            a.Options.Add(ScriptOption.ConvertUserDefinedDataTypesToBaseType);
            a.Options.Add(ScriptOption.IncludeIfNotExists);
            

          
            UrnCollection collection = new UrnCollection();

            collection.Add(table.Urn);

            var sqls =  a.Script(collection);

            foreach (var s in sqls)
            {
                System.Console.WriteLine(s);
            }

           
        }
    }
}

 

 

 

附一些沒用的話:

怎麼找到使用SMO這個方式的。。。

1.接到任務,第一反應,預存程序。在網上查了一堆資料,發現都是程式員自己寫的,MS沒有提供類似於Sphelp_text的方法,雖然也可以用,但是大多針對 特定版本的資料庫,不好維護。

2.轉而準備使用反應,用SQL TO Linq的檔案產生指令碼,但是,仍然上個原因,不好維護這個東西。

3.想起來Sqlserver mangement studio裡可以產生指令碼 。於是自己翻SSMS的動態 串連庫,根據 名稱試了幾個DLL的名稱,太複雜 ,沒有搞定。

4.於是開始查SQL的聯機文檔,發現有這個功能,試了一下,還真好用,嘿嘿。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.