select
Roles
from
MyTable
where
Roles.value('(/root/role)[1]', 'varchar(max)') like 'StringToSearchFor'
यदि आपका कॉलम XML
नहीं है तो , आपको इसे रूपांतरित करने की आवश्यकता है। आप अपने XML डेटा की कुछ विशेषताओं को क्वेरी करने के लिए अन्य सिंटैक्स का भी उपयोग कर सकते हैं। यहाँ एक उदाहरण है...
मान लें कि डेटा कॉलम में यह है:
<Utilities.CodeSystems.CodeSystemCodes iid="107" CodeSystem="2" Code="0001F" CodeTags="-19-"..../>
... और आप केवल वही चाहते हैं जहां CodeSystem = 2
तो आपकी क्वेरी होगी:
select
[data]
from
[dbo].[CodeSystemCodes_data]
where
CAST([data] as XML).value('(/Utilities.CodeSystems.CodeSystemCodes/@CodeSystem)[1]', 'varchar(max)') = '2'
ये पृष्ठ आपको टी-एसक्यूएल में एक्सएमएल को क्वेरी करने के तरीके के बारे में अधिक दिखाएंगे:
t-sql का उपयोग करके XML फ़ील्ड को क्वेरी करना
SQL सर्वर में XML डेटा को समतल करना
संपादित करें
इसके साथ थोड़ा और खेलने के बाद, मैं इस अद्भुत क्वेरी के साथ समाप्त हुआ जो क्रॉस एप्लाई का उपयोग करता है। यह हर पंक्ति (भूमिका) में आपके द्वारा अपनी पसंद की अभिव्यक्ति में रखे गए मूल्य की खोज करेगा...
इस तालिका संरचना को देखते हुए:
create table MyTable (Roles XML)
insert into MyTable values
('<root>
<role>Alpha</role>
<role>Gamma</role>
<role>Beta</role>
</root>')
हम इसे इस तरह क्वेरी कर सकते हैं:
select * from
(select
pref.value('(text())[1]', 'varchar(32)') as RoleName
from
MyTable CROSS APPLY
Roles.nodes('/root/role') AS Roles(pref)
) as Result
where RoleName like '%ga%'
आप SQL Fiddle को यहाँ देख सकते हैं:http://sqlfiddle.com/#!18/dc4d2/1/0