4

有没有办法在不实际执行 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 服务器解析器来确定最终选择语句中将返回哪些列的方法。

4

2 回答 2

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 TABLEs 本身一旦FMTONLY打开就会静默失败(带有成功消息))。


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

于 2012-04-09T15:14:45.663 回答
1

我认为这是不可能的,但你当然可以做类似的事情

  select <column list>
    ... blah blah
  where 1=0

为了得到没有任何结果的结果集的形状。

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

于 2012-04-06T19:51:59.027 回答