获取SQL Server中表的所有信息

时间:2012-02-07 19:20:14

标签: c# sql-server

我想获得有关表格的所有信息。 像tableName,columnName,InPrimaryKey,Is UniqueKey,Is Identity,Datatype,Maxlength,Is ForiegnKey

使用SQL SERVER的内置api,如information_schema.columns

4 个答案:

答案 0 :(得分: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转到外键。这比上面更复杂 - 你是在寻找当前表中指向其他表的所有外键,其他表中指向此表的所有外键,还是两者都是?

答案 1 :(得分:1)

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

答案 2 :(得分:0)

你可以做一个

select * from table where 0 = 1

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

答案 3 :(得分:0)

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

该代码位于http://radstudio.codeplex.com

名为DataClassBuilder.Net.dll的文件包含一个名为LoadDatabaseSchema()的方法,而LoadDataFieldsSchema()应该为您提供有关数据的所有信息。