2012-12-07 8 views
5

SQL Serverを使用してSQLクエリによって返される列の数を取得するにはどうすればよいですか?例えばクエリによって返された列の数を確認する

私は、次のようなクエリがある場合、:

SELECT * 
FROM A1, A2 

をそれは、テーブルA1 + A2テーブル内の列の合計数の列の合計数を返す必要があります。しかし、クエリがより複雑になる可能性があります。

+3

なぜ、総数が欲しいですか?また、where句での暗黙的な結合ではなく、適切な結合構文を使用する必要があります。 –

+0

いくつかのレガシーコードがありますが、別の場所でいくつのカラムが返されるかをチェックする必要があります。それはデバッグの問題のようなものです –

+0

レコード数が必要ありません。返される列の総数が必要です –

答えて

7

は一つの方法です。

1

私が知っている醜い:

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' 
+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は便利な表形式を提供します。新しいメタデータ・ディスカバリー・オプションは1が解決するだろう方法ですFMTONLYを交換する

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); 

あなたの例で使用したいと思い何である類似したコンテンツを提供するために、DMO機能、sys.dm_exec_describe_first_result_setは、もあり

この問題は2012年以前に発生しています。私のTSQLのチョップは、それに役立つ何かをするのに十分なほど強力ではなく、代わりにFMTONLYの出力を処理するために.NET言語に救済する必要があります。

SET FMTONLY ON; 
SELECT * 
FROM A1, A2; 
SET FMTONLY OFF; 
+1

テーブルを分析するためにクエリでSELECT INTOを使用できないため、これは私のケースでは救命措置でした。ありがとう! –

関連する問題