2012-02-07 88 views
0

我想获取有关表格的所有信息。 像表名,列名,InPrimaryKey,是唯一键,是一种身份,数据类型,MAXLENGTH,是ForiegnKey获取SQL Server中表格的所有信息

通过使用SQL Server像INFORMATION_SCHEMA.COLUMNS

+0

你想获取数据,还是想获取有关数据(元数据)的数据? – 2012-02-07 19:21:29

+2

你的问题是什么?你说你想使用information_schema.columns ..那么:'select * from information_schema.columns'然后? – Blorgbeard 2012-02-07 19:22:53

+0

对于某些针对* INFORMATION_SCHEMA视图的参数,请参阅http://sqlblog.com/blogs/aaron_bertrand/archive/2011/11/03/the-case-against-information-schema-views.aspx – 2012-02-07 19:26:39

回答

1

使用SQL Server管理对象(SMO)的内置API。这是一个方便且完全托管的API,用于获取和操作SQL Server数据库的模式。

2

你可以这样开始:

EXEC sp_help 'dbo.tablename'; 

然后你可以看一下直接列:

SELECT 
    c.name, 
    [type] = t.name, 
    c.max_length, 
    c.[precision], 
    c.[scale], 
    c.is_nullable, 
    c.is_identity 
FROM sys.columns AS c 
INNER JOIN sys.types AS t 
ON c.system_type_id = t.system_type_id 
AND c.user_type_id = t.user_type_id 
WHERE c.[object_id] = OBJECT_ID('dbo.tablename'); 

指标和参与PK &唯一约束,外键等都是有点复杂,因为多列可以参与任何这些实体。这里有指标和PK/UQ约束:

SELECT 
    [index] = i.name, 
    i.type_desc, 
    i.is_unique, 
    i.is_primary_key, 
    i.is_unique_constraint, 
    c.name, 
    ic.is_included_column 
FROM sys.indexes AS i 
INNER JOIN sys.index_columns AS ic 
ON i.[object_id] = ic.[object_id] 
INNER JOIN sys.columns AS c 
ON ic.[object_id] = c.[object_id] 
AND ic.index_id = i.index_id 
AND ic.column_id = c.column_id 
WHERE i.[object_id] = OBJECT_ID('dbo.tablename'); 

然后你可以通过查看sys.foreign_keyssys.foreign_key_columns移动到外键。这比上面更加复杂 - 你是在寻找当前表中指向其他表的所有外键,其他表中指向这个表的所有外键还是两者?

0

你可以做一个

select * from table where 0 = 1 

到数据表。列将被复制并准备好进行检查。

+0

不幸的是,不会告诉你任何有关主键,唯一约束,索引,外键等的信息。一些属性被保留(如果你的意思是'SELECT INTO'),但不是全部。不过,新桌子如何比旧桌子更“准备被检查”呢? – 2012-02-07 20:26:35

0

如果您想要一个工作项目,我的存储过程生成器/类对象创建器读取数据库中所有表和视图的数据库模式。

的代码可以在http://radstudio.codeplex.com

称为DataClassBuilder.Net.dll该文件包含一个名为LoadDatabaseSchema()和LoadDataFieldsSchema()方法应该给你你需要关于数据的所有信息。

相关问题