sql >> Database >  >> RDS >> Sqlserver

Hoe kan ik een waarde opvragen in de SQL Server XML-kolom?

select
  Roles
from
  MyTable
where
  Roles.value('(/root/role)[1]', 'varchar(max)') like 'StringToSearchFor'

Als uw kolom niet XML is , je moet het converteren. U kunt ook een andere syntaxis gebruiken om bepaalde kenmerken van uw XML-gegevens op te vragen. Hier is een voorbeeld...

Laten we aannemen dat de gegevenskolom dit heeft:

<Utilities.CodeSystems.CodeSystemCodes iid="107" CodeSystem="2" Code="0001F" CodeTags="-19-"..../>

... en je wilt alleen degene waar CodeSystem = 2 dan is uw vraag:

select 
  [data] 
from
  [dbo].[CodeSystemCodes_data]
  
where
  CAST([data] as XML).value('(/Utilities.CodeSystems.CodeSystemCodes/@CodeSystem)[1]', 'varchar(max)') = '2'

Op deze pagina's vindt u meer informatie over het opvragen van XML in T-SQL:

XML-velden opvragen met t-sql

XML-gegevens afvlakken in SQL Server

BEWERKEN

Nadat ik er wat meer mee had gespeeld, kreeg ik deze geweldige query die CROSS APPLY gebruikt. Deze zoekt in elke rij (rol) naar de waarde die je in je like-expressie hebt ingevoerd...

Gezien deze tabelstructuur:

create table MyTable (Roles XML)

insert into MyTable values
('<root>
   <role>Alpha</role>
   <role>Gamma</role>
   <role>Beta</role>
</root>')

We kunnen het als volgt opvragen:

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%'

U kunt de SQL Fiddle hier controleren:http://sqlfiddle.com/#!18/dc4d2/1/0



  1. Hoe kan ik de taak scripts genereren in SQL Server Management Studio 2008 automatiseren?

  2. Zijn externe sleutels echt nodig in een database-ontwerp?

  3. Hoe DIV werkt in MariaDB

  4. AI gebruiken voor SQL Tuning voor een echt geautomatiseerd proces