查找查询返回的列数

时间:2012-12-07 15:58:18

标签: sql sql-server

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

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

SELECT  *
FROM    A1, A2

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

4 个答案:

答案 0 :(得分:7)

这是一种方法:

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

select count(*)
from Information_Schema.Columns c
where table_name = '_MYLOCALTEMPTABLE'

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

答案 1 :(得分: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);

新的元数据发现选项正在取代FMTONLY,这就是人们在2012年之前解决这个问题的方法。我的TSQL印章显然不够强大,不能用它做任何有用的事情而是我必须摆脱困境使用.NET语言来处理FMTONLY的输出。

SET FMTONLY ON;
SELECT  *
FROM    A1, A2;
SET FMTONLY OFF;

答案 2 :(得分:2)

试试这个;

--Insert into a temp table (this could be any query)
SELECT * 
INTO #temp
FROM [yourTable]

--Select from temp table
SELECT * FROM #temp

--List of columns
SELECT COUNT(name) NumOfColumns FROM tempdb.sys.columns WHERE object_id =
object_id('tempdb..#temp');

--drop temp table
DROP TABLE #temp

答案 3 :(得分:1)

丑陋我知道:

SELECT COUNT(*) +
(
    SELECT COUNT(*)
    FROM information_schema.columns
    WHERE table_name = 'A1'
)
FROM information_schema.columns
WHERE table_name = 'A2'