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

पंक्तियों को जोड़ते समय XML PATH('') कैसे काम करता है

क्या FOR XML PATH('xxx') करता है परिणामसेट के लिए एक XML स्ट्रिंग बनाता है जो प्रत्येक पंक्ति को <xxx></xxx> . में रखता है तत्व और पंक्ति के अंदर प्रत्येक कॉलम मान, उस कॉलम के नाम वाले तत्व में।

यदि पथ खाली है (अर्थात PATH('') ) यह एक्सएमएल पीढ़ी में पंक्ति तत्व को छोड़ देता है। यदि स्तंभ का कोई नाम नहीं है तो यह XML पीढ़ी में स्तंभ तत्व को छोड़ देता है। जब दोनों PATH खाली होते हैं और स्तंभों का कोई नाम नहीं होता है तो यह प्रभावी रूप से सभी पंक्तियों का एक स्ट्रिंग संयोजन बन जाता है।

प्रक्रिया में बेहतर अंतर्दृष्टि प्राप्त करने के लिए निम्नलिखित कथन चलाएँ:

-- Each row is in a <beta></beta> element
-- Each column in that row in a <alfa></alfa> element (the column name)
SELECT
    alfa=','+TABLE_SCHEMA + '.' + TABLE_NAME
FROM
    INFORMATION_SCHEMA.TABLES
FOR
    XML PATH('beta');

-- Since the PATH is empty, the rows are not put inside an element
-- Each column in that row is in a <alfa></alfa> element (the column name)
SELECT
    alfa=','+TABLE_SCHEMA + '.' + TABLE_NAME
FROM
    INFORMATION_SCHEMA.TABLES
FOR
    XML PATH('');

-- Since the PATH is empty, the rows are not put inside an element
-- Since the column has no name it is not put inside an element     
SELECT
    ','+TABLE_SCHEMA + '.' + TABLE_NAME
FROM
    INFORMATION_SCHEMA.TABLES
FOR
    XML PATH('');

-- This uses the STUFF function to remove the leading comma to get a proper comma-seperated list    
SELECT STUFF((
    SELECT
        ','+TABLE_SCHEMA + '.' + TABLE_NAME
    FROM
        INFORMATION_SCHEMA.TABLES
    FOR
        XML PATH('')
    ),1,1,''
) AS comma_seperated_list;

अब मैं आपको यह पूछते हुए सुन रहा हूं:जब मैं किसी तालिका से केवल एक कॉलम का चयन करता हूं तो मैं कॉलम का नाम कैसे हटा सकता हूं। मेरी पसंद के क्रम में कई तरीके हैं:

  • XQuery गुण:SELECT [text()]=column_name ...
  • कॉलम मान का चयन करने के लिए एक सबक्वेरी का उपयोग करें:SELECT (SELECT column_name) ...
  • कॉलम को उसके प्रकार के अनुसार कास्ट करें:SELECT CAST(column_value AS <TYPE of the column>) ...

उदाहरण:

SELECT
    [text()]=TABLE_NAME
FROM
    INFORMATION_SCHEMA.TABLES
FOR
    XML PATH('');

SELECT
    (SELECT TABLE_NAME)
FROM
    INFORMATION_SCHEMA.TABLES
FOR
    XML PATH('');

SELECT
    CAST(TABLE_NAME AS SYSNAME)
FROM
    INFORMATION_SCHEMA.TABLES
FOR
    XML PATH('');



  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 सर्वर में ALL का उपयोग करने के 3 तरीके

  3. उदाहरण के साथ OPENJSON का परिचय (SQL सर्वर)

  4. SQL सर्वर क्वेरी:लिटरल के साथ तेज़ लेकिन वेरिएबल के साथ धीमा

  5. क्या यह कोड SQL इंजेक्शन को रोकता है?