通过系统表查询表的字段信息
我们可以通过查询系统表来获取某一张表下面的所有字段。系统表记录了整个 SQL Server 中所有库的表结构信息。
SELECT *
FROM [Demo].[dbo].[Amount]
GOCode language: CSS (css)
获取表的 Object ID
SELECT OBJECT_ID('[SportsStore].[dbo].[Products]')Code language: JavaScript (javascript)
通过 syscolumns 查询字段
SELECT * FROM syscolumns WHERE id = OBJECT_ID('Amount')Code language: JavaScript (javascript)
syscolumns 系统表存储了每个表和视图的列信息,常用字段说明:
| 列名 | 说明 |
|---|---|
id | 所属表或视图的 object_id |
name | 列名 |
colid | 列在表中的顺序编号 |
xtype | 列的数据类型(对应 systypes 中的类型编号) |
length | 列的物理长度 |
isnullable | 是否允许为 NULL(1 允许,0 不允许) |
更推荐的查询方式(SQL Server 2005+)
syscolumns 属于旧版兼容视图,推荐使用 sys.columns 目录视图:
SELECT c.name AS 列名,
t.name AS 数据类型,
c.max_length AS 最大长度,
c.is_nullable AS 允许空
FROM sys.columns c
JOIN sys.types t ON c.user_type_id = t.user_type_id
WHERE c.object_id = OBJECT_ID('Amount')Code language: PHP (php)
-- 或者使用 INFORMATION_SCHEMA.COLUMNS(跨数据库兼容)
SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Amount'Code language: JavaScript (javascript)
总结:
syscolumns/sys.columns/INFORMATION_SCHEMA.COLUMNS都可以用来查询字段信息,其中sys.columns是 SQL Server 当前版本最完整、最推荐的方案。