select
Roles
from
MyTable
where
Roles.value('(/root/role)[1]', 'varchar(max)') like 'StringToSearchFor'
Ces pages vont vous montrer plus sur la façon de requête XML en T-SQL:
L'interrogation des champs XML à l'aide de t-sql
L'aplatissement de Données XML dans SQL Server
MODIFIER
Après avoir joué avec elle un peu plus, je me suis retrouvé avec cette incroyable requête qui utilise la CROIX APPLIQUER. Celui-ci va rechercher toutes les lignes (rôle) pour la valeur que vous mettez dans votre expression...
Compte tenu de cette structure de la table:
create table MyTable (Roles XML)
insert into MyTable values
('<root>
<role>Alpha</role>
<role>Gamma</role>
<role>Beta</role>
</root>')
Nous pouvons requête comme ceci:
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%'
Vous pouvez vérifier le SQL Violon ici: http://sqlfiddle.com/#!3/ae0d5/13