查找查询返回的列数

Far*_*hin 6 sql sql-server

如何使用SQL Server获取SQL查询返回的列数?

例如,如果我有如下查询:

SELECT  *
FROM    A1, A2
Run Code Online (Sandbox Code Playgroud)

它应该返回表A1中的列总数+表A2中的总列数.但查询可能会更复杂.

Gor*_*off 7

这是一种方法:

select top 0
into _MYLOCALTEMPTABLE
from (your query here) t

select count(*)
from Information_Schema.Columns c
where table_name = '_MYLOCALTEMPTABLE'
Run Code Online (Sandbox Code Playgroud)

您可以通过创建视图来执行类似操作.


bil*_*nkc 6

您没有指定您的SQL Server版本,但我假设它不是2012年.但是,此问题的未来读者可能会在2012年以上,所以我将为他们发布此答案.

SQL Server 2012提供了一组过程来提供有关查询和参数的更多元数据.在这种情况下,存储过程sp_describe_first_result_set将提供方便的表格形式.

还有一个DMO函数sys.dm_exec_describe_first_result_set,用于提供类似的内容,这是您要在示例中使用的内容

DECLARE
    -- Your query goes here
    @query nvarchar(4000) = N'SELECT * FROM mdm.tblStgBatch AS TSB';

-- Tabular results
EXECUTE sys.sp_describe_first_result_set @tsql = @query;

-- Simple column count
SELECT
    COUNT(1) AS column_count
FROM
    sys.dm_exec_describe_first_result_set(@query, NULL, 0);
Run Code Online (Sandbox Code Playgroud)

新的元数据发现选项正在取代FMTONLY,这就是人们在2012年之前解决这个问题的方法.我的TSQL印章显然不够强大,不能用它做任何有用的事情,而是我必须挽救.NET语言才能工作与FMTONLY的输出.

SET FMTONLY ON;
SELECT  *
FROM    A1, A2;
SET FMTONLY OFF;
Run Code Online (Sandbox Code Playgroud)