आप अपने टेबल वेरिएबल 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>