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

तालिका चर से स्तंभों के लिए निश्चित नाम प्राप्त करें

आप अपने टेबल वेरिएबल top(0) . को क्वेरी कर सकते हैं एक outer apply . के साथ एक पंक्ति से for xml path('') . का उपयोग कर और फिर तत्व नामों के लिए XML को क्वेरी करें।

यह तब तक काम करेगा जब तक आपके कॉलम नामों में ऐसे नाम नहीं हैं जो अमान्य XML तत्व नाम हैं। उदाहरण के लिए कॉलम नाम एम्परसेंड या स्पेस का उपयोग नहीं कर सकते हैं।

declare @tv_source table
(
  c1 int, 
  providerName varchar(50),
  providerSMS varchar(50)
)

select TN.N.value('local-name(.)', 'sysname') as ColumnName
from 
  (
  select TV.*
  from (select 1) as D(N)
    outer apply (
                select top(0) *
                from @tv_source
                ) as TV
  for xml path(''), elements xsinil, type
  ) as TX(X)
cross apply TX.X.nodes('*') as TN(N)

एक अन्य विकल्प xmlschema . का उपयोग करना होगा for xml auto . का निर्देश . यह समाधान अमान्य XML वर्णों को संभालता है, लेकिन वे बच जाते हैं, इसलिए यदि आपके पास [provider Name] जैसी जगह वाला कॉलम नाम है परिणाम provider_x0020_Name . होगा .
आपको परिणामी एक्सएमएल को एक वेरिएबल में स्टोर करना होगा और अपनी इच्छित जानकारी के लिए क्वेरी करनी होगी।

declare @XML xml;

set @XML = 
  (
  select top(0) *
  from @tv_source
  for xml auto, xmlschema, type
  );

with xmlnamespaces('http://www.w3.org/2001/XMLSchema' as xsd)
select T.X.value('@name', 'sysname')
from @XML.nodes('//xsd:attribute') as T(X);

XML xmlschema . द्वारा बनाया गया है अधिक जानकारी है जो रुचि की हो सकती है। आप तालिका चर नाम और डेटाटाइप को भी पुनः प्राप्त कर सकते हैं।

<xsd:schema xmlns:schema="urn:schemas-microsoft-com:sql:SqlRowSet12" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes" targetNamespace="urn:schemas-microsoft-com:sql:SqlRowSet12" elementFormDefault="qualified">
  <xsd:import namespace="http://schemas.microsoft.com/sqlserver/2004/sqltypes" schemaLocation="http://schemas.microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd" />
  <xsd:element name="_x0040_tv_source">
    <xsd:complexType>
      <xsd:attribute name="c1" type="sqltypes:int" />
      <xsd:attribute name="providerName">
        <xsd:simpleType>
          <xsd:restriction base="sqltypes:varchar" sqltypes:localeId="1035" sqltypes:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth">
            <xsd:maxLength value="50" />
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:attribute>
      <xsd:attribute name="providerSMS">
        <xsd:simpleType>
          <xsd:restriction base="sqltypes:varchar" sqltypes:localeId="1035" sqltypes:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth">
            <xsd:maxLength value="50" />
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:attribute>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. न्यूल के बजाय मैं चयन कथन एसक्यूएल के परिणामस्वरूप `0` कैसे दिखा सकता हूं?

  2. केवल संग्रहीत प्रक्रिया के माध्यम से INSERT को बाध्य करें

  3. दो पंक्तियों की तुलना करें और उन स्तंभों की पहचान करें जिनके मान भिन्न हैं

  4. एसक्यूएल:स्टोरिंग गाइड

  5. SQL सर्वर - SQL सर्वर / TSQL ट्यूटोरियल पार्ट 132 में ग्रुप बाय और क्लॉज का उपयोग करके डुप्लिकेट रिकॉर्ड कैसे खोजें?