2008-09-09 8 views
11

Disons que j'ai des structures de données stockées en XML (type de données XML) dans SQL Server. Un utilisateur souhaite sortir un enregistrement si, dans les données, une certaine chaîne est trouvée. Quelles sont mes options pour implémenter ceci, et quelle est la meilleure façon de le faire?La meilleure façon de rechercher dans les données stockées au format XML dans SQL Server?

Notez que chaque enregistrement peut avoir différentes structures de données XML.

+0

@patrick les réponses sont meilleures, certainement. – Will

+0

Je pense que c'est un peu effronté que cette question soit marquée comme un doublon d'une question _later_ ... –

Répondre

3

J'ai trouvé le support XQuery très utile dans SQL 2005.

-1

Je pense que si vous pensez que vous aurez besoin de rechercher le XML sur une base régulière, vous sauverez beaucoup de douleur en extrayant certains des champs du XML dans leurs propres colonnes dans la base de données. Stocker le XML en tant que morceau de texte n'est pas très convivial: il ne peut pas être indexé, mis en cache correctement ou utilisé dans des requêtes complexes.

-1

Si votre Xml est fortement typé, comme dans le cas d'un schéma, utilisez le composant XQuery et construisez des vues au-dessus de vos colonnes XML. Le contenu fortement typé n'est pas une exigence, par tous les moyens, mais il vous permet de construire vos vues d'une manière prévisible.

5

Vous pouvez rechercher le code XML en tant que chaîne sans utiliser XQuery en le convertissant en chaîne et en utilisant LIKE. Cependant, comme une colonne calculée ne peut pas faire partie d'une clause WHERE, vous devez l'envelopper dans un autre SELECT comme ceci:

SELECT * FROM 
    (SELECT *, CONVERT(varchar(MAX), [XMLData]) as [XMLDataString] FROM [NamedTable]) irrelevant 
WHERE [XMLDataString] like '%SEARCH_STRING%' 
+0

Si le xml est avec moins de longueur c'est ok mais s'il a une longueur énorme, il ne fonctionne pas correctement. Seules les données partielles converties en tant que reste de la chaîne de données ont été ignorées – vignesh

+0

@vignesh vous avez raison. Si vous avez plus de 2 gigaoctets de données dans votre XML, varchar (MAX) ne suffira pas – Squazz

Questions connexes