select
Roles
from
MyTable
where
Roles.value('(/root/role)[1]', 'varchar(max)') like 'StringToSearchFor'
Jika kolom Anda bukan XML
, Anda perlu mengonversinya. Anda juga dapat menggunakan sintaks lain untuk menanyakan atribut tertentu dari data XML Anda. Ini contohnya...
Misalkan kolom data memiliki ini:
<Utilities.CodeSystems.CodeSystemCodes iid="107" CodeSystem="2" Code="0001F" CodeTags="-19-"..../>
... dan Anda hanya menginginkan yang di mana CodeSystem = 2
maka kueri Anda akan menjadi:
select
[data]
from
[dbo].[CodeSystemCodes_data]
where
CAST([data] as XML).value('(/Utilities.CodeSystems.CodeSystemCodes/@CodeSystem)[1]', 'varchar(max)') = '2'
Halaman-halaman ini akan menunjukkan kepada Anda lebih banyak tentang cara membuat kueri XML di T-SQL:
Membuat kueri bidang XML menggunakan t-sql
Meratakan Data XML di SQL Server
EDIT
Setelah bermain dengannya sedikit lagi, saya berakhir dengan kueri luar biasa yang menggunakan CROSS APPLY. Yang ini akan mencari setiap baris (peran) untuk nilai yang Anda masukkan ke dalam ekspresi suka Anda...
Mengingat struktur tabel ini:
create table MyTable (Roles XML)
insert into MyTable values
('<root>
<role>Alpha</role>
<role>Gamma</role>
<role>Beta</role>
</root>')
Kita dapat menanyakannya seperti ini:
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%'
Anda dapat memeriksa SQL Fiddle di sini:http://sqlfiddle.com/#!18/dc4d2/1/0