Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर का उपयोग करके गैर-रिक्त स्तंभों का चयन करें

मुझे नहीं पता कि यह तेज़ है या नहीं, लेकिन आप एक तरकीब का उपयोग कर सकते हैं:FOR XML AUTO सामग्री के बिना कॉलम छोड़ देगा:

DECLARE @tbl TABLE(col1 INT,col2 INT,col3 INT);
INSERT INTO @tbl VALUES (1,2,NULL),(1,NULL,NULL),(NULL,NULL,NULL);

SELECT * 
FROM @tbl AS tbl
FOR XML AUTO

यह परिणाम है:col3 गायब है...

<tbl col1="1" col2="2" />
<tbl col1="1" />
<tbl />

यह जानकर, आप उन स्तंभों की सूची पा सकते हैं, जो सभी पंक्तियों में NULL नहीं हैं, जैसे:

DECLARE @ColList VARCHAR(MAX)=
STUFF
(
    (
    SELECT DISTINCT ',' + Attr.value('local-name(.)','nvarchar(max)')
    FROM
    (
        SELECT
        (
            SELECT *
            FROM @tbl AS tbl
            FOR XML AUTO,TYPE
        ) AS TheXML
    ) AS t
    CROSS APPLY t.TheXML.nodes('/tbl/@*') AS A(Attr) 
    FOR XML PATH('')
    ),1,1,''
);

SELECT @ColList

@ColList . की सामग्री अब col1,col2 . है . इस स्ट्रिंग को आप गतिशील रूप से बनाए गए SELECT . में रख सकते हैं ।

अपडेट करें:संकेत

SELECT * . को रिप्लेस करना बहुत ही चतुराई भरा काम होगा INFORMATION_SCHEMA.COLUMNS . से बनाई गई कॉलम सूची के साथ सभी को छोड़कर अशक्त नहीं . और - यदि आवश्यक हो और संभव हो - प्रकार, जिनमें बहुत बड़ा डेटा (बीएलओबी) होता है।

अद्यतन2:प्रदर्शन

पता नहीं आपका बहुत बड़ा डेटा . क्या है वास्तव में इसका मतलब है ... बस इसे लगभग 500,000 पंक्तियों वाली तालिका पर आजमाया (SELECT * . के साथ) ) और यह एक मिनट से भी कम समय के बाद सही ढंग से वापस आ गया। आशा है, यह काफी तेज़ है...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. अटैचडबफाइलनाम के साथ क्या समस्या है?

  2. SQL सर्वर (T-SQL) में सर्वर संयोजन कैसे दिखाएं

  3. उन तालिकाओं में पंक्तियों को कैसे हटाएं जिनमें अन्य तालिकाओं के लिए विदेशी कुंजियाँ हों

  4. आप SQL सर्वर तालिका की प्राथमिक कुंजी कैसे सूचीबद्ध करते हैं?

  5. जांचें कि क्या तालिका में OBJECTPROPERTY () के साथ SQL सर्वर में एक विदेशी कुंजी है