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

TYPE_NAME()を使用して、SQLServerのデータ型の名前を取得します

    SQL Serverでは、TYPE_NAME()を使用できます IDに基づいてデータ型の名前を返す関数。これは、sys.columnsなどのシステムビューをクエリするときに役立ちます。 タイプのIDは返しますが、名前は返しません。

    TYPE_NAME()を使用できます システムデータ型およびユーザー定義データ型の場合。

    例1-基本的な使用法

    これがどのように機能するかを示す基本的な例です。

    SELECT TYPE_NAME(34) AS Result;
    

    結果:

    +----------+
    | Result   |
    |----------|
    | image    |
    +----------+
    

    この結果は、タイプID34が画像に使用されていることを示しています。 タイプ。

    例2–より便利な例

    より便利な例を次に示します。

    USE Music;
    SELECT 
      o.name AS [Object Name], 
      c.name AS [Column Name],  
      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
    WHERE o.type_desc = 'USER_TABLE';
    

    結果:

    +---------------+---------------+-------------+
    | Object Name   | Column Name   | Type Name   |
    |---------------+---------------+-------------|
    | Artists       | ArtistId      | int         |
    | Artists       | ArtistName    | nvarchar    |
    | Artists       | ActiveFrom    | date        |
    | Artists       | CountryId     | int         |
    | Genres        | GenreId       | int         |
    | Genres        | Genre         | nvarchar    |
    | Albums        | AlbumId       | int         |
    | Albums        | AlbumName     | nvarchar    |
    | Albums        | ReleaseDate   | date        |
    | Albums        | ArtistId      | int         |
    | Albums        | GenreId       | int         |
    | Country       | CountryId     | int         |
    | Country       | CountryName   | nvarchar    |
    +---------------+---------------+-------------+
    

    このクエリは、ユーザーテーブル、その列、および各列のデータ型を返します。

    TYPE_NAME()を削除すると次のようになります :

    USE Music;
    SELECT 
      o.name AS [Object Name], 
      c.name AS [Column Name],  
      c.user_type_id 
    FROM sys.objects AS o   
    JOIN sys.columns AS c  ON o.object_id = c.object_id
    WHERE o.type_desc = 'USER_TABLE';
    

    結果:

    +---------------+---------------+----------------+
    | Object Name   | Column Name   | user_type_id   |
    |---------------+---------------+----------------|
    | Artists       | ArtistId      | 56             |
    | Artists       | ArtistName    | 231            |
    | Artists       | ActiveFrom    | 40             |
    | Artists       | CountryId     | 56             |
    | Genres        | GenreId       | 56             |
    | Genres        | Genre         | 231            |
    | Albums        | AlbumId       | 56             |
    | Albums        | AlbumName     | 231            |
    | Albums        | ReleaseDate   | 40             |
    | Albums        | ArtistId      | 56             |
    | Albums        | GenreId       | 56             |
    | Country       | CountryId     | 56             |
    | Country       | CountryName   | 231            |
    +---------------+---------------+----------------+
    

    タイプIDを読み取るのは簡単ではありません。

    例3–ユーザー定義タイプ

    ユーザー定義のタイプが含まれています。結果にユーザー定義のタイプエイリアスを含める例を次に示します。

    USE Test;
    SELECT 
      o.name AS [Object Name], 
      c.name AS [Column Name],  
      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 o.type_desc = 'USER_TABLE'
    AND o.name = 'Client';
    

    結果:

    +---------------+---------------+-------------+-----------------+
    | Object Name   | Column Name   | Type Name   | User Defined?   |
    |---------------+---------------+-------------+-----------------|
    | Client        | ClientCode    | clientcode  | Yes             |
    | Client        | FirstName     | varchar     | No              |
    | Client        | LastName      | varchar     | No              |
    +---------------+---------------+-------------+-----------------+
    

    例4– WHERE句でTYPE_NAME()を使用する

    TYPE_NAME()を使用できます (およびその他のシステム機能)WHERE 句(および式が許可されている場所)

    ここでは、前の例を変更して、TYPE_NAME()を使用します。 WHEREで 条項。

    USE Test;
    SELECT 
      o.name AS [Object Name], 
      c.name AS [Column Name],  
      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 TYPE_NAME(c.user_type_id) = 'clientcode';
    

    結果:

    +---------------+---------------+-------------+-----------------+
    | Object Name   | Column Name   | Type Name   | User Defined?   |
    |---------------+---------------+-------------+-----------------|
    | Client        | ClientCode    | clientcode  | Yes             |
    +---------------+---------------+-------------+-----------------+
    

    例5–無効なタイプIDまたは不十分な権限

    無効なタイプIDを指定した場合、またはタイプを参照するための十分な権限がない場合、結果はNULLになります。

    SELECT TYPE_NAME(258) AS Result;
    

    結果:

    +----------+
    | Result   |
    |----------|
    | NULL     |
    +----------+
    

    タイプIDを取得

    データ型の名前はすでにわかっているが、そのIDが必要な場合は、TYPE_ID()を使用できます。 名前に基づいてデータ型のIDを返します。


    1. SQLServerテーブル列の文字列を置き換える方法

    2. URLの日付dd/mm / yyyy

    3. DBAの〜/.psqlrcファイル

    4. TEMPFILEオフラインフィジカルスタンバイ