select
Roles
from
MyTable
where
Roles.value('(/root/role)[1]', 'varchar(max)') like 'StringToSearchFor'
Om din kolumn inte är XML
, måste du konvertera den. Du kan också använda annan syntax för att fråga efter vissa attribut för dina XML-data. Här är ett exempel...
Låt oss anta att datakolumnen har detta:
<Utilities.CodeSystems.CodeSystemCodes iid="107" CodeSystem="2" Code="0001F" CodeTags="-19-"..../>
... och du vill bara ha de där CodeSystem = 2
då blir din fråga:
select
[data]
from
[dbo].[CodeSystemCodes_data]
where
CAST([data] as XML).value('(/Utilities.CodeSystems.CodeSystemCodes/@CodeSystem)[1]', 'varchar(max)') = '2'
Dessa sidor kommer att visa dig mer om hur du frågar XML i T-SQL:
Fråga i XML-fält med t-sql
Plattning av XML-data i SQL Server
REDIGERA
Efter att ha lekt med det lite mer, slutade jag med denna fantastiska fråga som använder CROSS APPLY. Den här kommer att söka på varje rad (roll) efter värdet du lägger i ditt liknande uttryck...
Med tanke på denna tabellstruktur:
create table MyTable (Roles XML)
insert into MyTable values
('<root>
<role>Alpha</role>
<role>Gamma</role>
<role>Beta</role>
</root>')
Vi kan fråga det så här:
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%'
Du kan kontrollera SQL Fiddle här:http://sqlfiddle.com/#!18/dc4d2/1/0