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
相关产品推荐
相关产品推荐

