获取从SQL语句返回的列

时间:2012-04-06 18:59:45

标签: sql sql-server-2008-r2

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

我研究了使用set showplan_all on并使用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语句中将返回哪些列的方法。

2 个答案:

答案 0 :(得分:1)

我不认为这是可能的,但你当然可以做像

这样的事情
  select <column list>
    ... blah blah
  where 1=0

以获得结果集的形状而没有任何结果。

您必须执行查询,但执行时间最短。

答案 1 :(得分:1)

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),否则您可能会混淆一段时间。 (正如我在尝试创建表来测试您的批处理语句时所做的那样,忘记CREATE TABLE本身在FMTONLY打开后会无声地失败(带有成功消息)。


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