有没有办法获取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语句中将返回哪些列的方法。
答案 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
打开后会无声地失败(带有成功消息)。
我刚刚注意到此功能似乎已被弃用,并且替换只允许您检索有关第一个结果集的信息。面对复杂的查询, 有什么用处?