J'ai le XML suivant stocké dans une colonne XML (appelée Roles
) dans une base de données SQL Server.
<root>
<role>Alpha</role>
<role>Beta</role>
<role>Gamma</role>
</root>
Je voudrais lister toutes les lignes qui y jouent un rôle spécifique. Ce rôle est passé par paramètre.
sql
sql-server
xml
xquery
Bistro
la source
la source
[1]
votre réponse?[1]
était une très bonne question. Cela signifie que vous choisissez la première valeur de rôle dans le XML et cela signifie que cela ne fonctionnera que pour la rechercheAlpha
dans votre exemple de xml. Il ne trouvera pas la ligne si vous recherchezBeta
.Si vous souhaitez que la requête fonctionne comme
where col like '%Beta%'
vous pouvez l’utilisercontains
la source
si votre nom de champ est Rôles et que le nom de table est table1, vous pouvez utiliser ce qui suit pour rechercher
la source
like
?forexample /root/role like ....
.value('(/root/role)[1]', 'varchar(max)') like '%yourtext%'
au lieu deexists
comme Leniel a expliqué@Role
.Je suis venu avec un travail simple ci-dessous qui est facile à retenir aussi :-)
la source
Vous pouvez faire ce qui suit
De toute évidence, c'est un peu un hack et je ne le recommanderais pas pour des solutions formelles. Cependant, je trouve cette technique très utile lorsque vous effectuez des requêtes ad hoc sur des colonnes XML dans SQL Server Management Studio pour SQL Server 2012.
la source
Conseil utile. Interroger une valeur dans la colonne XML SQL Server (XML avec espace de noms)
par exemple
par exemple XML dans les paramètres:
Par exemple, requête:
la source
J'ai utilisé l'instruction ci-dessous pour récupérer les valeurs du XML dans la table Sql
la source
Vous pouvez interroger la balise entière ou simplement la valeur spécifique. Ici, j'utilise un caractère générique pour les espaces de noms xml.
la source