select
Roles
from
MyTable
where
Roles.value('(/root/role)[1]', 'varchar(max)') like 'StringToSearchFor'
En caso de que su columna no sea XML
, necesitas convertirlo. También puede usar otra sintaxis para consultar ciertos atributos de sus datos XML. Aquí hay un ejemplo...
Supongamos que la columna de datos tiene esto:
<Utilities.CodeSystems.CodeSystemCodes iid="107" CodeSystem="2" Code="0001F" CodeTags="-19-"..../>
... y solo quieres aquellos donde CodeSystem = 2
entonces su consulta será:
select
[data]
from
[dbo].[CodeSystemCodes_data]
where
CAST([data] as XML).value('(/Utilities.CodeSystems.CodeSystemCodes/@CodeSystem)[1]', 'varchar(max)') = '2'
Estas páginas le mostrarán más sobre cómo consultar XML en T-SQL:
Consultando campos XML usando t-sql
Aplanamiento de datos XML en SQL Server
EDITAR
Después de jugar un poco más, terminé con esta consulta increíble que usa APLICACIÓN CRUZADA. Este buscará en cada fila (rol) el valor que puso en su expresión similar...
Dada esta estructura de tabla:
create table MyTable (Roles XML)
insert into MyTable values
('<root>
<role>Alpha</role>
<role>Gamma</role>
<role>Beta</role>
</root>')
Podemos consultarlo así:
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%'
Puede consultar SQL Fiddle aquí:http://sqlfiddle.com/#!18/dc4d2/1/0