sql >> データベース >  >> RDS >> Sqlserver

TYPE_ID()を使用して、SQLServerのデータ型のIDを取得します

    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     |
    +----------+
    

    1. SQLiteの日付/時刻関数の有効な時間文字列形式

    2. SQLServer-SQLスクリプトの実行を停止または中断します

    3. MySQLのトップ10のベストプラクティス

    4. Access2016でデータベースを手動で圧縮および修復する方法