首页 > 数据库 > mysql教程 > 如何检索 SQL 列的精确数据类型(包括参数和可为空性)?

如何检索 SQL 列的精确数据类型(包括参数和可为空性)?

Susan Sarandon
发布: 2024-12-26 12:33:11
原创
675 人浏览过

How Can I Retrieve the Precise Data Type of a SQL Column Including Parameters and Nullability?

通过 SQL 获取列类型

在各种数据库场景中,了解表中特定列的数据类型至关重要。幸运的是,SQL 提供了一个全面的解决方案来通过 INFORMATION_SCHEMA.COLUMNS 视图检索列类型。此视图提供有关数据库表及其列的元数据,包括令人垂涎的数据类型信息。

INFORMATION_SCHEMA.COLUMNS 中的 DATA_TYPE 列返回该列的基本数据类型。但是,对于某些具有参数化选项(例如 nvarchar 或 datetime2)的数据类型,仅靠基本类型可能不足以完全描述列的特征。

要解决此问题,可以参考视图中的其他列。例如,二进制和 varbinary 的 CHARACTER_OCTET_LENGTH、char、nchar、varchar 和 nvarchar 的 CHARACTER_MAXIMUM_LENGTH、datetime2 和 datetimeoffset 的 DATETIME_PRECISION、以及decimal 和 numeric 数据类型的 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;
登录后复制

此查询精心地将完整的数据类型信息(包括参数值和可为空状态)组装到 FULL_DATA_TYPE 列中。通过执行此查询,您可以检索特定列的确切数据类型并更深入地了解您的数据库架构。

以上是如何检索 SQL 列的精确数据类型(包括参数和可为空性)?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板