创建表例程定义

时间:2018-11-28 18:33:31

标签: sql sql-server sql-server-2016

我一直在使用此表 INFORMATION_SCHEMA.ROUTINES ,该表具有proc和函数的例程定义,我想知道是否存在用于创建表和创建视图例程的类似表。

2 个答案:

答案 0 :(得分:0)

我只是完全跳过了INFORMATION_SCHEMA.ROUTINES。相反,请看sys.sql_modules。它具有您要查找的所有内容(表除外)的ddl。但是我的问题是,为什么您需要为所有这些东西找到ddl?

答案 1 :(得分:0)

您可以使用sys.sql_modules查找视图的定义。对于表,一种选择是SMO对象。下面的C#示例为列出的数据库中的表返回DDL。这将需要引用Microsoft.SqlServer.Management.Sdk.SfcMicrosoft.SqlServer.SmoMicrosoft.SqlServer.ConnectionInfo命名空间。也使用System.Collections.Specialized,但在此示例中仅用于StringCollection。可以使用Name类的Table属性对此进行过滤,如下所述。

        //set source server and database using SMO objects
        Server srv = new Server(@"YourServer");
        //for Windows Authentication
        srv.ConnectionContext.LoginSecure = true;
        srv.ConnectionContext.StatementTimeout = 600;

        Database db = srv.Databases["YourDatabase"];

        //configure Scripter for DDL
        Scripter script = new Scripter(srv);
        ScriptingOptions scriptOpt = new ScriptingOptions();

        //this can changed to views, stored procedures, or other objects
        foreach (Table t in db.Tables)
        {
            //check for system objects
            //use t.Name to check table name if needed
            if (!t.IsSystemObject)
            {
                StringCollection sc = t.Script(scriptOpt);
                foreach (string s in sc)
                {
                    //DDL is here, it can accessed/used as needed 
                    Console.WriteLine(s);
                }
            }
        }