Accès aux données dans les colonnes XML de SQL Server
SQL Server permet de stocker des données XML dans des colonnes définies comme types de données XML. La récupération de données spécifiques de ces colonnes nécessite des requêtes spécialisées.
Disons que vous avez une colonne XML nommée « Rôles » avec cette structure :
<code class="language-xml"><root><role>Alpha</role><role>Beta</role><role>Gamma</role></root></code>
Pour rechercher les lignes contenant un rôle particulier, utilisez cette requête :
<code class="language-sql">SELECT Roles FROM MyTable WHERE Roles.value('(/root/role)[1]', 'varchar(max)') LIKE 'StringToSearchFor'</code>
Ceci utilise Roles.value
pour extraire la valeur du premier élément role
, en la convertissant en varchar(max)
. Cela permet de rechercher des rôles spécifiques.
Si votre colonne n'est pas déjà un type de données XML, utilisez CAST
pour la convertir avant d'interroger.
La requête peut également cibler des attributs XML. Par exemple, avec ce XML dans la colonne "data" :
<code class="language-xml"><utilities.codesystems.codesystemcodes ....="" code="0001F" codesystem="2" codetags="-19-" iid="107"></utilities.codesystems.codesystemcodes></code>
Pour obtenir les lignes où CodeSystem
est "2" :
<code class="language-sql">SELECT [data] FROM [dbo].[CodeSystemCodes_data] WHERE CAST([data] AS XML).value('(/Utilities.CodeSystems.CodeSystemCodes/@CodeSystem)[1]', 'varchar(max)') = '2'</code>
Pour des requêtes XML plus avancées dans T-SQL, voir :
Alternativement, CROSS APPLY
offre plus de flexibilité pour rechercher plusieurs éléments de « rôle » :
<code class="language-sql">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%'</code>
Cette approche permet une extraction plus efficace et ciblée des données des colonnes XML dans SQL Server.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!