一般来说,我们查询表结构定义主要是查询字段名,字段类型等信息。而这些信息一般都是存放在系统表中,主要用到以下这些系统表。
对象定义表:sysobjects
name 对象名
id 对象Id
xtype 对象类型
字段定义表:syscolumns
name 字段名称
id 表id
colid 字段Id
xusertype 字段类型Id
length 占用字节数
cdefault 默认值Id
类型定义表:systypes
name 类型名称
xusertype 类型Id
关于更多关于系统表的定义,请参阅微软官方文档
https://msdn.microsoft.com/zh-cn/library/ms179932.aspx (SQL Server 2014 版本)
所以查询表结构的SQL文可以这么写。其中查询条件sysobjects.name = 'Batch' 就是需要查询的表名。这里以ReportServer数据库中的Batch表结构为例。
SELECT
syscolumns.name as [Column Name],
systypes.name as [Column Type]
FROM
syscolumns
INNER JOIN sysobjects on syscolumns.id = sysobjects.id
INNER JOIN systypes on syscolumns.xusertype=systypes.xusertype
WHERE sysobjects.name = 'Batch'
查询结果如下
其实查询表结构的语句可以写的更复杂,可以查询更多信息,欢迎大家补充。