如何獲取SQL查詢使用SQL Server返回的列數?查詢查詢返回的列數
例如,如果我有一個像下面的查詢:
SELECT *
FROM A1, A2
它應該返回表A1 +表A2總列數列的總數。但是查詢可能更復雜。
如何獲取SQL查詢使用SQL Server返回的列數?查詢查詢返回的列數
例如,如果我有一個像下面的查詢:
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'
你可以通過創建一個視圖類似的東西。
醜我知道:
SELECT COUNT(*) +
(
SELECT COUNT(*)
FROM information_schema.columns
WHERE table_name = 'A1'
)
FROM information_schema.columns
WHERE table_name = 'A2'
問題是關於查詢而不是表格,所以這個不回答這個問題。 –
有幾個不同的查詢,我想知道他們返回的列數,不僅僅是這個特定的示例查詢。 –
試試這個;
--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
你沒有指定你的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;
這對我來說是一種挽救生命的事情,因爲我無法使用SELECT INTO與我的查詢來分析表格。謝謝! –
出於好奇,爲什麼你想要列的總數?另外,你應該使用正確的連接語法,而不是在where子句中隱式連接。 –
有一些遺留代碼需要處理,我需要在另一個地方檢查返回多少列。它更像是一個調試問題 –
我不需要記錄計數,我只需要返回的列總數 –