SQL を使用して列の型を取得する
さまざまなデータベース シナリオでは、テーブル内の特定の列のデータ型を理解することが重要です。幸いなことに、SQL は INFORMATION_SCHEMA.COLUMNS ビューを通じて列の型を取得するための包括的なソリューションを提供します。このビューは、必要なデータ型情報を含む、データベース テーブルとその列に関するメタデータを提供します。
INFORMATION_SCHEMA.COLUMNS の DATA_TYPE 列は、列の基本データ型を返します。ただし、nvarchar や datetime2 などのパラメーター化オプションを備えた一部のデータ型では、基本型だけでは列の特性を完全に説明できない場合があります。
この問題に対処するには、ビュー内の追加の列を参照できます。たとえば、binary および varbinary の場合は CHARACTER_OCTET_LENGTH、char、nchar、varchar、および nvarchar の場合は CHARACTER_MAXIMUM_LENGTH、datetime2 および datetimeoffset の場合は DATETIME_PRECISION、10 進数および数値データ型の場合は NUMERIC_PRECISION および NUMERIC_SCALE は、パラメータを正確に再構築するために必要な情報を提供します。
これらの補足列を参照し、その値を基本データ型と組み合わせることで、列の型の正確な説明を取得できます。次のクエリの例は、このプロセスを示しています。
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;
このクエリは、パラメーター値や NULL 可能性のステータスを含む完全なデータ型情報を FULL_DATA_TYPE 列に注意深く組み立てます。このクエリを実行すると、特定の列の正確なデータ型を取得し、データベース スキーマをより深く理解できます。
以上がパラメータやNULL可能性を含むSQL列の正確なデータ型を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。