Sie nicht angeben, der SQL Server-Version, aber ich gehe davon aus 2012. Es ist nicht jedoch zukünftige Leser dieser Frage könnte auf 2012+ so dass ich für sie diese Antwort veröffentlichen.
SQL Server 2012 bietet eine Reihe von Verfahren, um mehr Metadaten zu Abfragen und Parametern bereitzustellen. In diesem Fall liefert die gespeicherte Prozedur sp_describe_first_result_set eine handliche Tabellenform.
Es gibt auch eine DMO-Funktion, sys.dm_exec_describe_first_result_set, Ähnliche Inhalte zu schaffen, das ist das, was Sie in Ihrem Beispiel verwenden wollen würden
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);
Die neuen Metadata Discovery-Optionen FMTONLY ersetzen, das ist, wie man würde lösen Dieses Problem vor 2012. Meine TSQL-Chops sind anscheinend nicht stark genug, um irgendetwas Nützliches damit zu tun, und stattdessen müsste ich in eine .NET-Sprache ausweichen, um mit der Ausgabe von FMTONLY zu arbeiten.
SET FMTONLY ON;
SELECT *
FROM A1, A2;
SET FMTONLY OFF;
Aus Neugier, warum wollen Sie die Gesamtzahl der Spalten? Außerdem sollten Sie die richtige Joinsyntax anstelle von impliziten Joins in der where-Klausel verwenden. –
Es gibt einige Legacy-Code, mit denen ich arbeiten muss und ich muss an anderer Stelle überprüfen, wie viele Spalten zurückgegeben wird. Es ist mehr wie ein Debugging-Problem –
Ich brauche nicht die Anzahl der Datensätze, ich brauche nur die Gesamtzahl der zurückgegebenen Spalten –