You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server如何从表变量中获取列名?

获取SQL Server表变量的列名

首先要明确:表变量是内存中临时存在的对象,不会像永久表那样在sys.columns系统视图中留下持久化元数据,所以直接用OBJECT_ID(@Table)的方式完全行不通。

下面是几种可行的实现方法:

方法1:使用sys.dm_exec_describe_first_result_set函数

这个系统函数可以返回指定T-SQL语句的结果集元数据,只需构造查询表变量的语句即可获取列名:

DECLARE @Table TABLE(id int, column1 varchar(50), column2 int);
SELECT name 
FROM sys.dm_exec_describe_first_result_set(
    N'SELECT * FROM @Table', 
    N'@Table TABLE(id int, column1 varchar(50), column2 int)', 
    0
);

注意第二个参数需要传入和你声明一致的表变量定义。

方法2:临时表中转(若允许)

如果可以将表变量的数据转入临时表,就能用你熟悉的系统视图查询方式:

DECLARE @Table TABLE(id int, column1 varchar(50), column2 int);
-- 插入测试数据(可选,仅用于转临时表)
INSERT INTO @Table VALUES(1, 'test', 2);

-- 将表变量数据转存到临时表
SELECT * INTO #TempTable FROM @Table;

-- 查询临时表列名
SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('#TempTable');

-- 用完清理临时表
DROP TABLE #TempTable;

方法3:使用sp_describe_first_result_set存储过程

和方法1逻辑类似,通过系统存储过程获取元数据:

DECLARE @Table TABLE(id int, column1 varchar(50), column2 int);
EXEC sp_describe_first_result_set 
    @tsql = N'SELECT * FROM @Table', 
    @params = N'@Table TABLE(id int, column1 varchar(50), column2 int)';

返回结果集中的name字段就是表变量的列名。

内容的提问来源于stack exchange,提问作者Keras-JOB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 07:42:07