最新のリレーショナル データベース管理システム (RDBMS) では、特定のテーブルの列の型情報を取得することが一般的な要件です。このニーズに対処するために、ISO SQL で広くサポートされている INFORMATION_SCHEMA.COLUMNS ビューは、データ型を含む列のメタデータを取得するための標準化されたメカニズムを提供します。
INFORMATION_SCHEMA.COLUMNS ビュー内の DATA_TYPE 列には、ベース T が表示されます。 -SQL/SQL Server の型名 (nvarchar、datetime2、および 10 進数など)。ただし、パラメータ化された型のパラメータ引数は除外されます。この省略により、列が意図しない動作を引き起こす可能性があります。
この問題を軽減するには、CHARACTER_OCTET_LENGTH (バイナリの場合)、CHARACTER_MAXIMUM_LENGTH (char および nchar の場合)、DATETIME_PRECISION (datetime2 および datetimeoffset の場合) などの追加の列を利用することが不可欠です。 、NUMERIC_PRECISION、およびNUMERIC_SCALE (10 進数と数値の場合)。これらの値を組み合わせることで、パラメータを含む完全な型を再構築できます。
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 値の可能性を含む完全なデータ型を含む結果が得られます。
[クエリ結果のイメージ]
以上がSQL でパラメータと Nullability を含む完全な列データ型を取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。