查找查询返回的列数

问题描述 投票:0回答:5

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

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

SELECT  *
FROM    A1, A2

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

sql sql-server
5个回答
8
投票

您没有指定您的 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;

7
投票

这是一种方法:

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

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

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


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

1
投票

我知道丑陋:

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

0
投票

在 C# 中执行以下操作:

SqlDataReader myReader = command.ExecuteReader();

int numFields = myReader.FieldCount;

© www.soinside.com 2019 - 2024. All rights reserved.