咨询:如何查看SQL Server中临时表的定义?含#stun示例表
嘿,我来帮你搞定这两个关于SQL Server临时表的问题:
1. 如何查看临时表的定义?
SQL Server里的临时表分本地临时表(以#开头)和全局临时表(以##开头),查看它们定义的方法有好几种,挑几个实用的给你:
- 使用系统存储过程
sp_help:这是最省心的方法,直接执行sp_help '你的临时表名',它会返回表的结构、列信息、数据类型、约束等全套定义细节。 - 查询
tempdb的系统视图:临时表本质上是存在tempdb数据库里的,所以可以通过查询系统视图来提取信息,比如关联sys.tables、sys.columns和sys.types来获取列的详细定义:
SELECT c.name AS 列名, t.name AS 数据类型, c.max_length AS 长度, CASE c.is_nullable WHEN 1 THEN '是' ELSE '否' END AS 是否允许为空 FROM tempdb.sys.tables AS tbl JOIN tempdb.sys.columns AS c ON tbl.object_id = c.object_id JOIN tempdb.sys.types AS t ON c.system_type_id = t.system_type_id WHERE tbl.name LIKE '你的临时表名%' -- 临时表在tempdb里的名称会带随机后缀,用LIKE匹配
- 使用
sys.dm_exec_describe_first_result_set函数:这个函数能返回指定查询的结果集结构,对于临时表,你可以写个简单的SELECT语句来获取它的定义:
SELECT name AS 列名, system_type_name AS 数据类型, CASE is_nullable WHEN 1 THEN '是' ELSE '否' END AS 是否允许为空 FROM sys.dm_exec_describe_first_result_set(N'SELECT * FROM 你的临时表名', NULL, 0);
2. 查看你创建的
#stun临时表的定义 针对你创建的create table #stun (name varchar(40),id int,gender varchar(40))这个临时表,直接套用上面的方法就行:
- 方法一(最直观):执行下面的语句,瞬间就能看到所有定义信息:
sp_help '#stun'
- 方法二:用系统视图精准查询,因为
#stun在tempdb里的实际名称会带后缀(比如#stun________________00000000004C),所以用LIKE '#stun%'来匹配:
SELECT c.name AS 列名, t.name AS 数据类型, c.max_length AS 长度, CASE c.is_nullable WHEN 1 THEN '是' ELSE '否' END AS 是否允许为空 FROM tempdb.sys.tables AS tbl JOIN tempdb.sys.columns AS c ON tbl.object_id = c.object_id JOIN tempdb.sys.types AS t ON c.system_type_id = t.system_type_id WHERE tbl.name LIKE '#stun%'
- 方法三:用
sys.dm_exec_describe_first_result_set快速获取列定义:
SELECT name AS 列名, system_type_name AS 数据类型, CASE is_nullable WHEN 1 THEN '是' ELSE '否' END AS 是否允许为空 FROM sys.dm_exec_describe_first_result_set(N'SELECT * FROM #stun', NULL, 0);
内容的提问来源于stack exchange,提问作者Saurabh
相关产品推荐
相关产品推荐

