今天在开发中遇到一个需要获取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
就可以解决问题。