Maison >base de données >tutoriel mysql >Comment interroger des valeurs dans des colonnes XML dans SQL Server ?

Comment interroger des valeurs dans des colonnes XML dans SQL Server ?

DDD
DDDoriginal
2025-01-13 12:08:44971parcourir

How to Query Values within XML Columns in SQL Server?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn