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

SQL Server(T-SQL)でデータ型のリストを返す方法

    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;
    

    1. MariaDB10.6の新機能

    2. phpMyAdminを介してデータベースをインポートおよびエクスポートする方法(「アクセスが拒否されましたデータベースdb_nameの作成」エラー)

    3. SQLServerの文字列またはバイナリデータは切り捨てられます

    4. トップ5のMySQLGUIツール(無料および有料)