2012-12-07 133 views
5

如何獲取SQL查詢使用SQL Server返回的列數?查詢查詢返回的列數

例如,如果我有一個像下面的查詢:

SELECT * 
FROM A1, A2 

它應該返回表A1 +表A2總列數列的總數。但是查詢可能更復雜。

+3

出於好奇,爲什麼你想要列的總數?另外,你應該使用正確的連接語法,而不是在where子句中隱式連接。 –

+0

有一些遺留代碼需要處理,我需要在另一個地方檢查返回多少列。它更像是一個調試問題 –

+0

我不需要記錄計數,我只需要返回的列總數 –

回答

7

這裏有一個方法:

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

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

你可以通過創建一個視圖類似的東西。

1

醜我知道:

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

問題是關於查詢而不是表格,所以這個不回答這個問題。 –

+0

有幾個不同的查詢,我想知道他們返回的列數,不僅僅是這個特定的示例查詢。 –

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 
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; 
+1

這對我來說是一種挽救生命的事情,因爲我無法使用SELECT INTO與我的查詢來分析表格。謝謝! –