select
Roles
from
MyTable
where
Roles.value('(/root/role)[1]', 'varchar(max)') like 'StringToSearchFor'
Falls Ihre Spalte nicht XML
ist , müssen Sie es konvertieren. Sie können auch andere Syntax verwenden, um bestimmte Attribute Ihrer XML-Daten abzufragen. Hier ist ein Beispiel...
Nehmen wir an, diese Datenspalte hat Folgendes:
<Utilities.CodeSystems.CodeSystemCodes iid="107" CodeSystem="2" Code="0001F" CodeTags="-19-"..../>
... und Sie wollen nur die mit CodeSystem = 2
dann lautet Ihre Abfrage:
select
[data]
from
[dbo].[CodeSystemCodes_data]
where
CAST([data] as XML).value('(/Utilities.CodeSystems.CodeSystemCodes/@CodeSystem)[1]', 'varchar(max)') = '2'
Diese Seiten zeigen Ihnen mehr darüber, wie Sie XML in T-SQL abfragen:
Abfragen von XML-Feldern mit t-sql
Reduzieren von XML-Daten in SQL Server
BEARBEITEN
Nachdem ich ein bisschen mehr damit herumgespielt hatte, landete ich bei dieser erstaunlichen Abfrage, die CROSS APPLY verwendet. Dieser durchsucht jede Zeile (Rolle) nach dem Wert, den Sie in Ihren Like-Ausdruck eingegeben haben ...
Angesichts dieser Tabellenstruktur:
create table MyTable (Roles XML)
insert into MyTable values
('<root>
<role>Alpha</role>
<role>Gamma</role>
<role>Beta</role>
</root>')
Wir können es so abfragen:
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%'
Sie können die SQL-Fiddle hier überprüfen:http://sqlfiddle.com/#!18/dc4d2/1/0