获取从SQL语句返回的列

有没有办法获取SQL查询将返回的列而不实际执行SQL语句?

我调查了使用set showplan_all并使用OutputList字段,但结果并不是我想要的.我需要以正确的顺序和正确的列名称(如果它们是否别名)获取列.

我正在使用SQL Server 2008 R2.

为了澄清,这是一个可以运行的查询示例:

--log that the user has executed a query
insert into execution_log_table
(timestamp
,user_id
,report_id)
values (CURRENT_TIMESTAMP
,1234
,5678)

select *
from (select column1
,column2
from another_table) tbl

在尝试获取返回的列时,我不想在第一个表中插入任何内容.

*注意:这只是一个简单的例子,我有一些SQL语句,它们是数百行代码,可以执行多个crud操作.我知道我可以尝试手动解析代码行,但我的问题是针对使用SQL服务器解析器确定哪些列将在最终select语句中返回的方法.

最佳答案
SET FMTONLY ON.它“返回”空结果集,但不应影响任何实际表:

set fmtonly on
go
insert into execution_log_table
([timestamp]
,user_id
,report_id)
values (CURRENT_TIMESTAMP
,1234
,5678)

select *
from (select column1
,column2
from another_table) tbl

顺便说一句,记得在为任何其他活动使用相同的连接之前将其关闭(在其自己的批次中使用SET FMTONLY OFF),否则您可能会混淆一段时间. (正如我在尝试创建表来测试您的批处理语句时所做的那样,忘记了一旦FMTONLY打开,CREATE TABLE本身就会无声地失败(带有成功消息).

我刚刚注意到这个功能似乎已被弃用,并且替换只允许您检索有关第一个结果集的信息.面对复杂的查询有什么用?

点赞