2012-02-07 26 views
10

私は介して列プロパティへのアクセスを得ることができることを知っている:私はしかし、見つけることができませんどのような列データ型のSQL Serverメタデータはどこにありますか?

select * 
from sysobjects 

は、列のタイプや種類の長さを取得する場所についての情報、すなわちです:

FOO VARCHAR(80) 

メタデータテーブルの型宣言の「VARCHAR(80)」部分はどこにありますか?

私はsystypesテーブルを調べてみましたが、xtypeの値がsysobjectsテーブルのxtypeの値と一致しませんでした。

*私はこれらのテーブルの作成に使用された元のSQLにアクセスできず、管理者権限も持っていません。

あなたがDB2に精通している場合、私はあなたが接近している

select name, 
     coltype, 
     length, 
    from sysibm.syscolumns 
where tbname = 'FOO' 

答えて

14

と同等を探しています。 sys.columnsを見ると列を取得できます。

OBJECT_ID=OBJECT_ID('dbo.Foo')でテーブルをフィルタリングできます。

sys.columnsから長さを取得できます。データ型はsystem_typeフィールドにあります。そのフィールドのキーはsys.typesです。 、SQL Serverのシステムテーブルは推奨されている(すなわちsyscolumnssysobjects)とそれが代わりにビューを使用することがベストプラクティスとして推奨されます、サイドノートとして

select object_NAME(c.object_id), c.name, t.name, c.max_length 
from sys.columns c 
INNER JOIN sys.types t 
    ON t.system_type_id = c.system_type_id 

:それは

はあなたが行うことができます全体ですsys.columns,sys.objectsなど

これにより、それぞれの表、列、データ型、および最大長が表示されます。

+7

参加しますc.user_type_idの代わりにt.user_type_idを使用する必要があります。列がユーザー定義のフィールドの場合は、それぞれに複数の結果が返されます。 t.user_type_id = c.system_type_idのsys.typesに参加する –

4

これを行うための正しい方法はユーザーにsys.typesテーブルの _type_id参加することです:

select object_NAME(c.object_id), c.name, t.name, c.max_length 
from sys.columns c 
INNER JOIN sys.types t 
    ON t.user_type_id = c.user_type_id 

user_type_idは、システムのタイプについてsystem_type_idと同じですが - 参照ドキュメント:https://msdn.microsoft.com/en-gb/library/ms188021.aspx

関連する問題