我一直在使用此表 INFORMATION_SCHEMA.ROUTINES ,该表具有proc和函数的例程定义,我想知道是否存在用于创建表和创建视图例程的类似表。
答案 0 :(得分:0)
我只是完全跳过了INFORMATION_SCHEMA.ROUTINES。相反,请看sys.sql_modules。它具有您要查找的所有内容(表除外)的ddl。但是我的问题是,为什么您需要为所有这些东西找到ddl?
答案 1 :(得分:0)
您可以使用sys.sql_modules
查找视图的定义。对于表,一种选择是SMO对象。下面的C#示例为列出的数据库中的表返回DDL。这将需要引用Microsoft.SqlServer.Management.Sdk.Sfc
,Microsoft.SqlServer.Smo
和Microsoft.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);
}
}
}