Sql server 查询完整列数据类型MSSQL

Sql server 查询完整列数据类型MSSQL,sql-server,sqldatatypes,system-views,Sql Server,Sqldatatypes,System Views,我需要查询完整的列数据类型,最终使用长度规范 如果我使用INFORMATION\u SCHEMA.COLUMNS或sp\u COLUMNS(@tablename)我会得到不同列中的类型、大小和数字,我必须用case语句解码每个数据类型 我写了一个这样的查询,但它不太可靠,我不确定它是否总是正确的。我希望有一种方法可以在一列中检索所有列类型 这是我的问题,我仍然需要解码许多类型: select a.TABLE_SCHEMA, a.TABLE_NAME, COLUMN_N

我需要查询完整的列数据类型,最终使用长度规范

如果我使用INFORMATION\u SCHEMA.COLUMNSsp\u COLUMNS(@tablename)我会得到不同列中的类型、大小和数字,我必须用case语句解码每个数据类型

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

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

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'

查找下面的查询结果是否会令您满意,或者它可以帮助您接近结果

选择
t、 对象id为“表id”,
对象名称(t.object\u id)作为“表名”,
c、 列id“列id”,
c、 名称为“列名”,
c、 系统类型标识为“数据类型标识”,
ty.name+'('+convert(varchar(10),c.max_length)+')作为“数据类型”


sys.tables t内部连接sys.columns c
在t.object\u id=c.object\u id上
左连接系统类型ty

在c.system\u-type\u-id=ty.user\u-type\u-id

No上,因为我得到的数据类似于
int(4)
decimal(13)
。在SQLServer
中,声明@V int(4)
是语法错误,十进制(13)不检索精度的数字。