2012-04-25 38 views
3

我正在使用DataAdapter.FillSchema从MS SQL中检索表的模式。不幸的是,这不会返回列的默认值。有没有办法以快速高效的方式将此值作为模式的一部分进行检索,因为我需要检查数百个表?如何从MS SQL数据表中检索列默认值

谢谢!

+0

结果DataTable中有一个列集合,其中每个项目都有一个默认值属性。它不是正确地填充了吗? – 2012-04-25 11:20:52

+0

不知道它是否会对您有所帮助,但是我编写了一个[SQL工具集](http://code.google.com/p/bsn-modulestore/),可以从所有表格创建抽象语法树,包括其默认值(如果您对如何完成此操作感兴趣,请查看从[这里]开始的源代码(http://code.google.com/p/bsn-modulestore/source/browse/bsn.ModuleStore/Sql/DatabaseInventory.cs) 。已授权为LGPL。 – Lucero 2012-04-25 11:22:32

+0

这就是问题所在:该属性未被填充。 – Daniel 2012-04-25 11:22:49

回答

0

你应该尝试这样的检索表模式。

public partial class Form1 : Form 
{ 
    //create connectionString variable 
    const string conString = @"Data Source=.\SQLEXPRESS; Initial Catalog=DBTest; Integrated Security=SSPI"; 

    SqlConnection cn = null; 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     this.getTableSchema(); 
    } 

//function to get the schemas from the Tables in MSSQLSERVER 
    private void getTableSchema() 
    { 
     try 
     { 

      cn = new SqlConnection(conString); 
      cn.Open(); 

      //call the getSchema Method of the SqlConnection Object passing in as a parameter the schema to retrieve 
      DataTable dt = cn.GetSchema("tables"); 

      //Binded the retrieved data to a DataGridView to show the results. 
      this.dataGridView1.DataSource = dt; 


     } 
     catch (Exception) 
     { 

      throw; 
     } 
    } 


} 

编辑:上conString

7

默认值关闭报价是在仅行插入的时间来确定。

作为替代方案,您可以利用Information_schema

SELECT TABLE_NAME, COLUMN_NAME, COLUMN_DEFAULT 
FROM AdventureWorks2012.INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'Person'; 
0

尝试以下查询:

SELECT object_definition(default_object_id) AS definition 
FROM sys.columns 
WHERE name  ='ColumnName' 
AND object_id = object_id('TableName') 
0

有没有办法可以使用FillSchema的做到这一点。详情请查看下面的链接 http://msdn.microsoft.com/en-us/library/229sz0y5.aspx

INFORMATION_SCHEMA是你应该看的地方。 INFORMATION_SCHEMA包含许多系统视图,可以显示数据库结构的详细信息。例如

INFORMATION_SCHEMA.TABLES:显示数据库中的表格列表 INFORMATION_SCHEMA.COLUMNS:显示数据库所有表格中的列及其属性列表。请查看以下位置以了解更多详情。

http://msdn.microsoft.com/en-us/library/ms186778.aspx

要使用查询,您可以使用下面的查询获取默认值:

SELECT * 
FROM INFORMATION_SCHEMA.Columns 
WHERE TABLE_NAME = 'YourTableName'