2012-12-07 12 views
5

SQL सर्वर का उपयोग कर SQL क्वेरी द्वारा लौटाए गए कॉलम की संख्या मुझे कैसे प्राप्त कर सकता है?एक प्रश्न द्वारा लौटाए गए कॉलम की संख्या

उदाहरण के लिए

, अगर मैं निम्नलिखित की तरह एक प्रश्न है:

SELECT * 
FROM A1, A2 

यह तालिका A1 + तालिका ए 2 में स्तंभों की कुल संख्या में स्तंभों की कुल संख्या लौटना चाहिए। लेकिन सवाल अधिक जटिल हो सकता है।

+3

जिज्ञासा से, आप कॉलम की कुल संख्या क्यों चाहते हैं? साथ ही, आपको क्लॉज में अंतर्निहित जॉइन के बजाय, उचित रूप से सिंटैक्स में शामिल होना चाहिए। –

+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

आप अपने एसक्यूएल सर्वर संस्करण निर्दिष्ट नहीं किया है लेकिन मैं इसे 2012 नहीं है हालांकि, इस सवाल के भविष्य के पाठकों पर 2012+ तो मैं उनके लिए इस उत्तर पोस्ट कर रहा हूँ हो सकता है यह सोचते हैं रहा हूँ।

SQL सर्वर 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 से पहले यह समस्या। मेरी टीएसक्यूएल चॉप स्पष्ट रूप से इसके साथ कुछ भी उपयोगी करने के लिए पर्याप्त मजबूत नहीं हैं और इसके बजाय मुझे एफएमटीटीई के आउटपुट के साथ काम करने के लिए एक .NET भाषा में जमानत देना होगा।

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

यह मेरे मामले में एक जीवन-बचतकर्ता था क्योंकि मैं तालिका का विश्लेषण करने के लिए अपनी क्वेरी के साथ चयन का उपयोग नहीं कर सकता। धन्यवाद! –

संबंधित मुद्दे