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
Libérer: 2025-01-13 12:08:44
original
980 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal