如何使用SQL Server获取SQL查询返回的列数?
例如,如果我有如下查询:
SELECT *
FROM A1, A2
它应该返回表A1中的总列数+表A2中的总列数。但查询可能会更复杂。
答案 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'