2012-02-07 46 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()方法應該給你你需要關於數據的所有信息。

相關問題