查询全列数据类型 MSSQL

Posted

技术标签:

【中文标题】查询全列数据类型 MSSQL【英文标题】:Query full column datatypes MSSQL 【发布时间】:2015-03-10 12:05:02 【问题描述】:

我需要查询全列数据类型,最终需要指定长度。

如果我使用 INFORMATION_SCHEMA.COLUMNSsp_Columns(@tablename) 我会在不同的列中获得类型、大小和数字,并且我必须使用大小写对每种数据类型进行解码陈述。

我写了一个这样的查询,但它不是很可靠,我不确定它是否总是正确的。我希望有一种方法可以在一个列中检索所有列类型。

这是我的查询,我仍然需要解码许多类型:

select
    a.TABLE_SCHEMA, 
    a.TABLE_NAME, 
    COLUMN_NAME, 
    case 
        when CHARACTER_MAXIMUM_LENGTH is not null then DATA_TYPE+'('+convert(varchar, CHARACTER_MAXIMUM_LENGTH)+')'
        when DATA_TYPE in ('int','datetime','time','date','text') then DATA_TYPE
        when DATA_TYPE in ('decimal','numeric') then DATA_TYPE+'('+convert(varchar,NUMERIC_PRECISION) +','+ convert(varchar,NUMERIC_SCALE) +')'
        else '' 
        end as FULL_DATA_TYPE
from INFORMATION_SCHEMA.COLUMNS a
inner join INFORMATION_SCHEMA.TABLES b
    on b.TABLE_NAME = a.TABLE_NAME
    and b.TABLE_SCHEMA = a.TABLE_SCHEMA
    and b.TABLE_TYPE = 'BASE TABLE'

【问题讨论】:

【参考方案1】:

如果结果让您满意或可以帮助您接近结果,请查找以下查询

选择 t.object_id 作为“表 ID”, object_name(t.object_id) 作为“表名”, c.column_id '列 ID', c.name 为“列名”, c.system_type_id 作为“数据类型 ID”, ty.name + '(' + convert(varchar(10),c.max_length) + ')'as '数据类型'

来自 sys.tables t 内连接 sys.columns c 关于 t.object_id=c.object_id left join sys.types ty 关于 c.system_type_id =ty.user_type_id

【讨论】:

不,因为我得到像int(4)decimal(13) 这样的数据。在 SQLServer 中,declare @V int(4) 是语法错误,decimal(13) 不检索精度数字。

以上是关于查询全列数据类型 MSSQL的主要内容,如果未能解决你的问题,请参考以下文章

sql注入mssql篇

MySQL一文搞懂MySQL语句(基础篇)

MySQL一文搞懂MySQL语句(基础篇)

MySQL一文搞懂MySQL语句(基础篇)

经典MSSQL语句大全和常用SQL语句命令的作用

微软数据库MSsql 强制索引 要加多个如何加 它的搜索机制是啥?