SQL Serverを使用してSQLクエリによって返される列の数を取得するにはどうすればよいですか?
たとえば、次のようなクエリがある場合:
SELECT *
FROM A1, A2
テーブルA1の列の総数+テーブルA2の列の総数を返す必要があります。ただし、クエリはもっと複雑になる可能性があります。
SQL Serverを使用してSQLクエリによって返される列の数を取得するにはどうすればよいですか?
たとえば、次のようなクエリがある場合:
SELECT *
FROM A1, A2
テーブルA1の列の総数+テーブルA2の列の総数を返す必要があります。ただし、クエリはもっと複雑になる可能性があります。
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);
新しいメタデータ検出オプションは、2012年より前にこの問題を解決する方法であるFMTONLYに取って代わります。私のTSQLチョップは、それで役立つことを行うのに十分な強度がないようです。代わりに、.NET言語にベイルアウトする必要があります。 FMTONLYの出力を使用します。
SET FMTONLY ON;
SELECT *
FROM A1, A2;
SET FMTONLY OFF;
1 つの方法を次に示します。
select top 0
into _MYLOCALTEMPTABLE
from (your query here) t
select count(*)
from Information_Schema.Columns c
where table_name = '_MYLOCALTEMPTABLE'
ビューを作成することで、同様のことができます。
これを試して;
--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'