我正在使用DataAdapter.FillSchema
从MS SQL中检索表的模式。不幸的是,这不会返回列的默认值。有没有办法以快速高效的方式将此值作为模式的一部分进行检索,因为我需要检查数百个表?如何从MS SQL数据表中检索列默认值
谢谢!
我正在使用DataAdapter.FillSchema
从MS SQL中检索表的模式。不幸的是,这不会返回列的默认值。有没有办法以快速高效的方式将此值作为模式的一部分进行检索,因为我需要检查数百个表?如何从MS SQL数据表中检索列默认值
谢谢!
你应该尝试这样的检索表模式。
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
默认值关闭报价是在仅行插入的时间来确定。
作为替代方案,您可以利用Information_schema
SELECT TABLE_NAME, COLUMN_NAME, COLUMN_DEFAULT
FROM AdventureWorks2012.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Person';
尝试以下查询:
SELECT object_definition(default_object_id) AS definition
FROM sys.columns
WHERE name ='ColumnName'
AND object_id = object_id('TableName')
有没有办法可以使用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'
结果DataTable中有一个列集合,其中每个项目都有一个默认值属性。它不是正确地填充了吗? – 2012-04-25 11:20:52
不知道它是否会对您有所帮助,但是我编写了一个[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
这就是问题所在:该属性未被填充。 – Daniel 2012-04-25 11:22:49