select
Roles
from
MyTable
where
Roles.value('(/root/role)[1]', 'varchar(max)') like 'StringToSearchFor'
Nel caso in cui la tua colonna non sia XML
, devi convertirlo. Puoi anche utilizzare un'altra sintassi per interrogare determinati attributi dei tuoi dati XML. Ecco un esempio...
Supponiamo che la colonna di dati abbia questo:
<Utilities.CodeSystems.CodeSystemCodes iid="107" CodeSystem="2" Code="0001F" CodeTags="-19-"..../>
... e vuoi solo quelli dove CodeSystem = 2
quindi la tua domanda sarà:
select
[data]
from
[dbo].[CodeSystemCodes_data]
where
CAST([data] as XML).value('(/Utilities.CodeSystems.CodeSystemCodes/@CodeSystem)[1]', 'varchar(max)') = '2'
Queste pagine ti mostreranno di più su come eseguire query XML in T-SQL:
Interrogazione di campi XML utilizzando t-sql
Conversione dei dati XML in SQL Server
MODIFICA
Dopo averci giocato un po' di più, mi sono ritrovato con questa stupefacente query che utilizza CROSS APPLY. Questo cercherà in ogni riga (ruolo) il valore che hai inserito nella tua espressione simile...
Data questa struttura di tabella:
create table MyTable (Roles XML)
insert into MyTable values
('<root>
<role>Alpha</role>
<role>Gamma</role>
<role>Beta</role>
</root>')
Possiamo interrogarlo in questo modo:
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%'
Puoi controllare SQL Fiddle qui:http://sqlfiddle.com/#!18/dc4d2/1/0