SQL Serverでは、TYPE_ID()
を使用できます 名前に基づいてデータ型のIDを返す関数。これは、データ型のIDを保存しているが、名前は保存していないシステムビューをクエリする場合に役立ちます。通常、名前を覚える方が簡単です。 IDを覚えるのは簡単ではありません。
TYPE_ID()
を使用できます システムデータ型およびユーザー定義データ型の場合。
例1-基本的な使用法
これがどのように機能するかを示す基本的な例です。
SELECT TYPE_ID('varchar') AS Result;
結果:
+----------+ | Result | |----------| | 167 | +----------+
この結果は、 varchar データ型のIDは167です。
例2–データベースの例
TYPE_ID()
の使用例を次に示します。 WHERE
結果を特定のデータ型のみにフィルタリングする句。
SELECT o.name AS [Object Name], c.name AS [Column Name], c.user_type_id AS [Type ID], TYPE_NAME(c.user_type_id) AS [Type Name] FROM sys.objects AS o JOIN sys.columns AS c ON o.object_id = c.object_id JOIN sys.types t ON c.user_type_id = t.user_type_id WHERE c.user_type_id = TYPE_ID('varchar');
結果:
+---------------+---------------+-----------+-------------+ | Object Name | Column Name | Type ID | Type Name | |---------------+---------------+-----------+-------------| | Individual | FirstName | 167 | varchar | | Individual | LastName | 167 | varchar | | Occupation | JobTitle | 167 | varchar | | Event | EventName | 167 | varchar | | Scoreboard | Player | 167 | varchar | | Team | TeamName | 167 | varchar | | Client | FirstName | 167 | varchar | | Client | LastName | 167 | varchar | | Colors | ColorName | 167 | varchar | +---------------+---------------+-----------+-------------+
TYPE_NAME()
も使用していることに気付くでしょう この例では、IDに基づいて名前を返します。
例3–ユーザー定義タイプ
TYPE_ID()
を使用することもできます ユーザー定義型の場合。これは、結果にユーザー定義のタイプエイリアスを含む例です。
SELECT o.name AS [Object Name], c.name AS [Column Name], c.user_type_id AS [Type ID], TYPE_NAME(c.user_type_id) AS [Type Name], CASE WHEN t.is_user_defined = 1 THEN 'Yes' ELSE 'No' END AS [User Defined?] FROM sys.objects AS o JOIN sys.columns AS c ON o.object_id = c.object_id JOIN sys.types t ON c.user_type_id = t.user_type_id WHERE c.user_type_id = TYPE_ID('varchar') OR c.user_type_id = TYPE_ID('clientcode');
結果:
+---------------+---------------+-----------+-------------+-----------------+ | Object Name | Column Name | Type ID | Type Name | User Defined? | |---------------+---------------+-----------+-------------+-----------------| | Individual | FirstName | 167 | varchar | No | | Individual | LastName | 167 | varchar | No | | Occupation | JobTitle | 167 | varchar | No | | Event | EventName | 167 | varchar | No | | Scoreboard | Player | 167 | varchar | No | | Team | TeamName | 167 | varchar | No | | Client | ClientCode | 257 | clientcode | Yes | | Client | FirstName | 167 | varchar | No | | Client | LastName | 167 | varchar | No | | Colors | ColorName | 167 | varchar | No | +---------------+---------------+-----------+-------------+-----------------+
ここで、clientcodeタイプはユーザー定義のタイプエイリアスであり、is_user_defined
フラグは1
です 。この場合、私はCASE
を使用します Yes
を返す式 (そしてNo
を返すには 0
の場合 。
例4–無効なタイプまたは不十分な権限
無効な型名を指定した場合、または型を参照するための十分な権限がない場合、結果はNULLになります。
SELECT TYPE_ID('oops') AS Result;
結果:
+----------+ | Result | |----------| | NULL | +----------+