SQL server获取字段信息以及不支持“variant”数据类型的问题解决

今天在开发中遇到一个需要获取SQL server数据库字段信息的需求

需要字段名称、字段类型、字段长度、字段注释等信息

经过一番搜索终于找到两个满足需求的sql,记录一下

SELECT
    a.name tablename,
    b.name colName,
    c.name colType,
    b.length colLength 
FROM
    sysobjects a
    INNER JOIN syscolumns b ON a.id= b.id 
    AND a.xtype IN ( 'U', 'V' )
    INNER JOIN systypes c ON b.xtype= c.xusertype 
WHERE
    a.name= '表名'

这一段可以查看当前表的名称、字段名称、字段类型和字段长度,但是缺少我需要的字段注释,

SELECT
    A.name AS tablename,
    B.name AS colName,
    C.value AS colDescription 
FROM
    sys.tables A
    INNER JOIN sys.columns B ON B.object_id = A.object_id
    LEFT JOIN sys.extended_properties C ON C.major_id = B.object_id 
    AND C.minor_id = B.column_id 
WHERE
    A.name = '表名'

这一段可以查到字段注释;最后把两段代码用字段名join简单结合了一下;

第二段在使用jdbc或者mybatis时会报错:

com.microsoft.sqlserver.jdbc.SQLServerException: 不支持“variant”数据类型。

这是由于查询语句查到的三个参数是variant数据类型的,它可以存放多种数据类型因此必须进行转换;

CONVERT(varchar(200), a.name) as table_name

但是在字段注解中如果使用中文,SQL server在转换成varchar时可能会变成乱码因此需要使用

CONVERT(nvarchar(200), c.value) as colDescription

就可以解决问题。

上一篇:对一元多项式的加减以及求导运算的实现


下一篇:Mysql必练50题(第三天)