Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/02/2011, 13h39   #1
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 667
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 667
Points : 8 715
Points : 8 715
Par défaut Indexation textuelle XML dans colonne varbinary(max) ?

Bonjour à tous,

Sous SQL Server 2008, j'ai besoin d'effectuer de la recherche en texte intégral dans une colonne contenant un document XML assez large pour chaque ligne.
Seules les valeurs de ce document m'intéressent (pas les attributs ni les éléments).

Le problème est que ce document XML est stockée dans une colonne de type nvarchar(max) (ne cherchez pas l'idiot qui a fait cela, ce n'est pas moi ).

Je ne peux pas transtyper une telle colonne en XML à l'aide de la requête suivante :

Code :
1
2
UPDATE maTable
SET	document_XML = CAST(document AS xml)
Qui me "retourne" :

Citation:
Msg 9402, Level 16, State 1, Line 2
XML parsing: line 1, character 38, unable to switch the encoding
Il faut savoir que la collation de la base de données est Thai_CI_AS, mais je soupçonne plus quelque chose dans le domaine UTF-16 / UTF-8.

J'ai donc tenté de transtyper au type varbinary et de préciser le type de document en ajoutant une nouvelle colonne de type char(4) valuée à '.xml'.
Cette fois la population de la colonne fonctionne, mais une requête avec CONTAINS ne me retourne jamais de ligne.

Qu'en pensez-vous ?

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 14h04   #2
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 950
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 950
Points : 17 769
Points : 17 769
Essaye de faire une colonne persistante calculée avec un CAST.... COLLATE. Puis tu indexe en FT.

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h58.


 
 
 
 
Partenaires

Hébergement Web