首页 > 数据库 > mysql教程 > 如何获取包含参数的SQL列的完整数据类型?

如何获取包含参数的SQL列的完整数据类型?

DDD
发布: 2024-12-27 18:58:14
原创
387 人浏览过

How to Get the Complete Data Type of a SQL Column Including Parameters?

获取 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 视图中的其他列:

  • CHARACTER_OCTET_LENGTH(对于二进制)
  • CHARACTER_MAXIMUM_LENGTH(对于 char 和 nchar)
  • DATETIME_PRECISION(对于 datetime2 和 datetimeoffset)
  • NUMERIC_PRECISION 和 NUMERIC_SCALE(对于十进制和数字)

对于例如,以下 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中文网其他相关文章!

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