获取 SQL 中的列类型
要获取表中特定列的数据类型,可以使用 INFORMATION_SCHEMA.COLUMNS 系统看法。 ISO SQL(包括 SQL Server)支持此视图。
INFORMATION_SCHEMA.COLUMNS 视图中的 DATA_TYPE 列提供基本的 SQL Server/T-SQL 类型名称。但是,请注意,此信息可能不包含参数化类型的参数,这在某些情况下可能会导致意外行为。
例如,考虑数据类型为 nvarchar(max)、datetime2(3) 和 的三列小数(10,5)。相应的 INFORMATION_SCHEMA.COLUMNS 输出将仅显示 nvarchar、datetime2 和十进制。
要完全重建类型的参数值,建议检查 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中文网其他相关文章!