0

ストアドプロシージャでこのようなクエリを見たことがあります

SELECT ORDINAL_POSITION 'column_id', column_name 'column_name', 
         column_name + ' : ' + data_type 'column_nametype',
         data_type 'data_type',
         CHARacter_maximum_length 'SIZE'
     FROM information_schema.columns
     WHERE table_name = @TableName

しかし、information_schema.columnsはテーブル名ではなく、スキーマであることがわかりましたが、データをどのように取得していますか?実際のテーブル名を知るにはどうすればよいですか?スキーマの使用法は何ですか?

4

2 に答える 2

0

このクエリを試してください:

    DECLARE @TableName NVARCHAR(MAX)

    SET @TableName = 'tblTest'

    SELECT 
            column_id 'column_id', columns.name 'column_name'
           ,columns.name + ' : ' + types.name 'column_nametype'
           ,types.name  'data_type'
           ,columns.max_length 'SIZE'
    FROM 
        sys.columns
    INNER JOIN
        sys.types
    ON
        types.system_type_id = columns.system_type_id
    WHERE 
        objecT_id = OBJECT_ID(@TableName)
    ORDER BY 
        Column_id
于 2012-10-25T10:04:23.130 に答える
0

INFORMATION_SCHEMA ビューは、サーバー上のマスター データベースに存在し、データベース コンテキストからデータを取得する特別なタイプのビューです。つまり、それらは master データベースにありますが、現在使用しているデータベースの情報を取得します。

他のビューと同様に、これらのビューのソースを表示できます。特定の例では、それ自体がシステム ビューである sys.columns、sys.objects、および sys.types を使用します。

sys.types などのビューは、ソース コードを使用できるビューですが、その中のシステム テーブル/ビューの一部は直接参照できません。たとえば、ユーザーは sys.sysscalartypes を使用できず、システム関数 sysconv も使用できません。

実装はプラットフォーム固有のように見えますが、INFORMATION_SCHEMA ビューのユーザーは SQL Server に限定されません。たとえば、MySQL には独自の INFORMATION_SCHEMA 構造があります。

古い sysobjects (sys.objects とは対照的に) システム テーブルの使用は推奨されません。これは、それらが今後も使用されるという保証がないためです。INFORMATION_SCHEMA は一般的に有用ですが、DBA が必要とするレベルの情報を常に公開するとは限りません。

于 2012-10-25T09:59:37.587 に答える