SQL で列の型を取得する
テーブル内の特定の列のデータ型を取得するには、INFORMATION_SCHEMA.COLUMNS システムを利用できます。ビュー。このビューは、SQL Server を含む ISO SQL でサポートされています。
INFORMATION_SCHEMA.COLUMNS ビュー内の DATA_TYPE 列は、基本的な SQL Server/T-SQL 型名を提供します。ただし、この情報にはパラメーター化された型の引数が含まれていない可能性があるため、場合によっては予期しない動作が発生する可能性があることに注意してください。
たとえば、データ型が nvarchar(max)、datetime2(3)、および datetime2(3) である 3 つの列について考えてみましょう。 10 進数 (10,5)。対応する INFORMATION_SCHEMA.COLUMNS 出力には、nvarchar、datetime2、および 10 進数のみが表示されます。
型のパラメーター値を完全に再構築するには、INFORMATION_SCHEMA.COLUMNS ビューから追加の列を調べることをお勧めします。
たとえば、次の SQL クエリは、特定の列の詳細なデータ型を取得する方法を示しています。
WITH q AS ( SELECT c.TABLE_SCHEMA, c.TABLE_NAME, c.ORDINAL_POSITION, c.COLUMN_NAME, c.DATA_TYPE, CASE WHEN c.DATA_TYPE IN ( N'binary', N'varbinary' ) THEN ( CASE c.CHARACTER_OCTET_LENGTH WHEN -1 THEN N'(max)' ELSE CONCAT( N'(', c.CHARACTER_OCTET_LENGTH , N')' ) END ) WHEN c.DATA_TYPE IN ( N'char', N'varchar', N'nchar', N'nvarchar' ) THEN ( CASE c.CHARACTER_MAXIMUM_LENGTH WHEN -1 THEN N'(max)' ELSE CONCAT( N'(', c.CHARACTER_MAXIMUM_LENGTH, N')' ) END ) WHEN c.DATA_TYPE IN ( N'datetime2', N'datetimeoffset' ) THEN CONCAT( N'(', c.DATETIME_PRECISION, N')' ) WHEN c.DATA_TYPE IN ( N'decimal', N'numeric' ) THEN CONCAT( N'(', c.NUMERIC_PRECISION , N',', c.NUMERIC_SCALE, N')' ) END AS DATA_TYPE_PARAMETER, CASE c.IS_NULLABLE WHEN N'NO' THEN N' NOT NULL' WHEN N'YES' THEN N' NULL' END AS IS_NULLABLE2 FROM INFORMATION_SCHEMA.COLUMNS AS c ) SELECT q.TABLE_SCHEMA, q.TABLE_NAME, q.ORDINAL_POSITION, q.COLUMN_NAME, CONCAT( q.DATA_TYPE, ISNULL( q.DATA_TYPE_PARAMETER, N'' ), q.IS_NULLABLE2 ) AS FULL_DATA_TYPE FROM q WHERE q.TABLE_SCHEMA = 'yourSchemaName' AND q.TABLE_NAME = 'yourTableName' AND q.COLUMN_NAME = 'yourColumnName' ORDER BY q.TABLE_SCHEMA, q.TABLE_NAME, q.ORDINAL_POSITION;
このクエリは、次の形式で結果を返します。
TABLE_SCHEMA | TABLE_NAME | ORDINAL_POSITION | COLUMN_NAME | FULL_DATA_TYPE yourSchemaName | yourTableName | 1 | yourColumnName | nvarchar(max) NOT NULL
以上がパラメータを含む SQL 列の完全なデータ型を取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。