如何使用 SQL Server 获取 SQL 查询返回的列数?
例如,如果我有如下查询:
SELECT *
FROM A1, A2
它应该返回表 A1 中的总列数 + 表 A2 中的总列数。但查询可能更复杂。
如何使用 SQL Server 获取 SQL 查询返回的列数?
例如,如果我有如下查询:
SELECT *
FROM A1, A2
它应该返回表 A1 中的总列数 + 表 A2 中的总列数。但查询可能更复杂。
这是一种方法:
select top 0
into _MYLOCALTEMPTABLE
from (your query here) t
select count(*)
from Information_Schema.Columns c
where table_name = '_MYLOCALTEMPTABLE'
您可以通过创建视图来做类似的事情。
您没有指定您的 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;
试试这个;
--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
丑我知道:
SELECT COUNT(*) +
(
SELECT COUNT(*)
FROM information_schema.columns
WHERE table_name = 'A1'
)
FROM information_schema.columns
WHERE table_name = 'A2'