SQL Serverでデータ型のリストを取得する必要がある場合は、システムビューの1つを使用してそれを実行できます。
特に、sys.types
を使用できます システムカタログビュー。このビューは、データベースで定義されているすべてのシステム提供およびユーザー定義のデータ型を返します。 SQL Server 2000 sys.systypes
を使用している場合 トリックを行う必要があります。
例1-sys.types
表示
sys.types
SQL Server2000より後のバージョンのSQLServerを使用している場合は、ビューが最適です。
sys.types
を使用する最も速くて簡単な方法 ビューはすべてを選択することです。その場合、コードは次のようになります。
SELECT * FROM sys.types;
ただし、これにより、関心があるかどうかわからない多くの列が返されます。関心のある列だけに絞り込むことができます。
関心のある列を選択する例を次に示します。
SELECT name, max_length, [precision], scale, is_user_defined FROM sys.types;
結果:
+------------------+--------------+-------------+---------+-------------------+ | name | max_length | precision | scale | is_user_defined | |------------------+--------------+-------------+---------+-------------------| | image | 16 | 0 | 0 | 0 | | text | 16 | 0 | 0 | 0 | | uniqueidentifier | 16 | 0 | 0 | 0 | | date | 3 | 10 | 0 | 0 | | time | 5 | 16 | 7 | 0 | | datetime2 | 8 | 27 | 7 | 0 | | datetimeoffset | 10 | 34 | 7 | 0 | | tinyint | 1 | 3 | 0 | 0 | | smallint | 2 | 5 | 0 | 0 | | int | 4 | 10 | 0 | 0 | | smalldatetime | 4 | 16 | 0 | 0 | | real | 4 | 24 | 0 | 0 | | money | 8 | 19 | 4 | 0 | | datetime | 8 | 23 | 3 | 0 | | float | 8 | 53 | 0 | 0 | | sql_variant | 8016 | 0 | 0 | 0 | | ntext | 16 | 0 | 0 | 0 | | bit | 1 | 1 | 0 | 0 | | decimal | 17 | 38 | 38 | 0 | | numeric | 17 | 38 | 38 | 0 | | smallmoney | 4 | 10 | 4 | 0 | | bigint | 8 | 19 | 0 | 0 | | hierarchyid | 892 | 0 | 0 | 0 | | geometry | -1 | 0 | 0 | 0 | | geography | -1 | 0 | 0 | 0 | | varbinary | 8000 | 0 | 0 | 0 | | varchar | 8000 | 0 | 0 | 0 | | binary | 8000 | 0 | 0 | 0 | | char | 8000 | 0 | 0 | 0 | | timestamp | 8 | 0 | 0 | 0 | | nvarchar | 8000 | 0 | 0 | 0 | | nchar | 8000 | 0 | 0 | 0 | | xml | -1 | 0 | 0 | 0 | | sysname | 256 | 0 | 0 | 0 | +------------------+--------------+-------------+---------+-------------------+
これらは、現在のデータベース内のデータ型です。別のデータベースに切り替えると、異なる結果が得られる可能性があります(これは、ユーザー定義のデータ型またはエイリアスデータ型が定義されているかどうか、およびデータベース間で異なるかどうかに大きく依存します)。
例2–エイリアスとユーザー定義のデータ型
前の例では、is_user_defined
を含めました 桁。すべてのデータ型が0
であるため、どのデータ型もユーザー定義またはエイリアスのデータ型ではないことがわかります。 それらの価値として。
エイリアスデータ型を作成して、結果にどのように表示されるかを見てみましょう。
エイリアスデータ型を作成します:
CREATE TYPE SSN FROM varchar(11) NOT NULL;
それでは、クエリをもう一度実行してみましょう。
SELECT name, max_length, [precision], scale, is_user_defined FROM sys.types;
結果:
+------------------+--------------+-------------+---------+-------------------+ | name | max_length | precision | scale | is_user_defined | |------------------+--------------+-------------+---------+-------------------| | image | 16 | 0 | 0 | 0 | | text | 16 | 0 | 0 | 0 | | uniqueidentifier | 16 | 0 | 0 | 0 | | date | 3 | 10 | 0 | 0 | | time | 5 | 16 | 7 | 0 | | datetime2 | 8 | 27 | 7 | 0 | | datetimeoffset | 10 | 34 | 7 | 0 | | tinyint | 1 | 3 | 0 | 0 | | smallint | 2 | 5 | 0 | 0 | | int | 4 | 10 | 0 | 0 | | smalldatetime | 4 | 16 | 0 | 0 | | real | 4 | 24 | 0 | 0 | | money | 8 | 19 | 4 | 0 | | datetime | 8 | 23 | 3 | 0 | | float | 8 | 53 | 0 | 0 | | sql_variant | 8016 | 0 | 0 | 0 | | ntext | 16 | 0 | 0 | 0 | | bit | 1 | 1 | 0 | 0 | | decimal | 17 | 38 | 38 | 0 | | numeric | 17 | 38 | 38 | 0 | | smallmoney | 4 | 10 | 4 | 0 | | bigint | 8 | 19 | 0 | 0 | | hierarchyid | 892 | 0 | 0 | 0 | | geometry | -1 | 0 | 0 | 0 | | geography | -1 | 0 | 0 | 0 | | varbinary | 8000 | 0 | 0 | 0 | | varchar | 8000 | 0 | 0 | 0 | | binary | 8000 | 0 | 0 | 0 | | char | 8000 | 0 | 0 | 0 | | timestamp | 8 | 0 | 0 | 0 | | nvarchar | 8000 | 0 | 0 | 0 | | nchar | 8000 | 0 | 0 | 0 | | xml | -1 | 0 | 0 | 0 | | sysname | 256 | 0 | 0 | 0 | | SSN | 11 | 0 | 0 | 1 | +------------------+--------------+-------------+---------+-------------------+
新しいデータ型が(下部に)表示されます。 1
の値もあります is_user_defined
内 列。
sys.systypes
表示
sys.systypes
もあります システム互換表示。下位互換性のためにのみ提供されています。これは、systypes
が原因です はSQLServer2000のシステムテーブルの名前であり、そのテーブルを参照するコードを備えたレガシーシステムが多数存在する可能性があります。
Microsoftは、sys.systypes
システム互換表示は、Microsoft SQL Serverの将来のバージョンで削除されるため、新しい作業でこの表示を使用しないことをお勧めします。
つまり、sys.types
を使用します 代わりに できれば。
ただし、以前のバージョンのSQL Serverをまだ使用している場合は、sys.systypes
を使用する必要があります。 。
sys.systypes
に注意してください sys.types
とは異なる列/列名が含まれています 、そのため、前の例で使用した列名は機能しません。
アスタリスク(*
)を使用してすべての列を選択することもできます )ただし、ワイルドカード文字:
SELECT * FROM sys.systypes;