7

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

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

SELECT  *
FROM    A1, A2

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

4

4 回答 4

7

这是一种方法:

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

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

您可以通过创建视图来做类似的事情。

于 2012-12-07T16:04:05.330 回答
7

您没有指定您的 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;
于 2012-12-07T16:38:26.337 回答
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
于 2012-12-07T16:16:32.217 回答
1

丑我知道:

SELECT COUNT(*) +
(
    SELECT COUNT(*)
    FROM information_schema.columns
    WHERE table_name = 'A1'
)
FROM information_schema.columns
WHERE table_name = 'A2'
于 2012-12-07T16:03:18.517 回答