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 21/01/2011, 10h00   #1
Membre Expert
 
Inscription : octobre 2007
Messages : 3 937
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 3 937
Points : 1 905
Points : 1 905
Par défaut tester si colonne xml is empty

Bonjour

J'aimerais pouvoir faire un select des rows ayant un champ xml NULL ou Vide

is null fonctionne
mais > '' me donne une erreur

existe-t-il une formule magique ?

Merci de votre aide
__________________
« Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)
olibara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2011, 11h24   #2
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 723
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 723
Points : 6 844
Points : 6 844
bonjour,

Pouvez vous nous donner un jeu de données pour votere cas ?

Merci
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2011, 15h45   #3
Membre Expert
 
Inscription : octobre 2007
Messages : 3 937
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 3 937
Points : 1 905
Points : 1 905
Bonjour MikeDavem

Mon cas n'est pas relatif au jeu de donnée mais a la syntaxe necessaire pour tester une colonne de type XML

L'intention etant de detecter les row ayant une valeur nulle ou vide pour cette colonne

J'ai fini par trouver


Code :
 WHERE MaCol IS NOT NULL AND (DATALENGTH(MaCol) < 5)
__________________
« Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)
olibara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2011, 10h45   #4
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 723
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 723
Points : 6 844
Points : 6 844
Je ne comprends pas votre réponse. Vous voulez détecter les colonnes de type XML qui sont NULL (ou absences de valeurs)

Citation:
J'aimerais pouvoir faire un select des rows ayant un champ xml NULL ou Vide
... et vous dites que la solution suivante vous permet de faire cela :

Code :
 WHERE MaCol IS NOT NULL AND (DATALENGTH(MaCol) < 5)
Pour moi vous n'aurez jamais ce que vous demandez initialement.

++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2011, 12h22   #5
Membre Expert
 
Inscription : octobre 2007
Messages : 3 937
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 3 937
Points : 1 905
Points : 1 905
Pour etre plus precis et pour vous aider a comprendre la difficulté originale

L'objetif est de tester si un champ XML est

- NULL (on non null)
et Vide (ou non Vide)

Donc peu importe que le test soit positif ou negatif !!

Le test que j'ai mis en place
Code :
WHERE MaCol IS NOT NULL AND (DATALENGTH(MaCol) < 5)
Permet d'isoler les champs non null n'ayant pas un contenu signifiant

La difficulté résidait dans le fait que SQL Serveur n'accepte pas les operateur
>,< , <> sur un champ XML

Je cherchais donc la maniere de tester si ce champ xml avait ou non un contenu signifiant autre que NULL

La methode qui permet de faire cela est la fonction Ensuite le choix de la longueur en operande depend evidement du contenu
Dans mon cas il s'est averé que certains rows contenaient ente 0 et 5 blanc
__________________
« Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)
olibara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2011, 13h50   #6
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 723
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 723
Points : 6 844
Points : 6 844
Dans ce cas je pense que vous pouvez utiliser la méthode exist().

Exemple :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
DECLARE @T TABLE
(
 col XML NULL
)
 
INSERT @T VALUES (NULL)
INSERT @T VALUES ('<root><a>element</a></root>')
INSERT @T VALUES ('<bb><a>element</a></bb>')
INSERT @T VALUES ('')
INSERT @T VALUES ('    ')
INSERT @T VALUES (' jjlk')
 
SELECT * FROM @T
WHERE col.exist('*') = 1
++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2011, 15h29   #7
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 665
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 665
Points : 8 710
Points : 8 710
Bonjour,

Au passage écrire :

Code :
WHERE MaCol IS NOT NULL AND (DATALENGTH(MaCol) < 5)
Est équivalent à :

Code :
WHERE DATALENGTH(MaCol) < 5
NULL n'est pas une valeur, donc il n'a pas de longueur !

@++
__________________
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 23/01/2011, 13h01   #8
Membre Expert
 
Inscription : octobre 2007
Messages : 3 937
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 3 937
Points : 1 905
Points : 1 905
Citation:
NULL n'est pas une valeur, donc il n'a pas de longueur !
Merci elsuket
Mais j'ai pris l'habitude de systematiquement tester les NULL explicitement

Ca evite parfois quelques résultat inattendus
__________________
« Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)
olibara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2011, 14h44   #9
Membre Expert
 
Inscription : octobre 2007
Messages : 3 937
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 3 937
Points : 1 905
Points : 1 905
Citation:
Dans ce cas je pense que vous pouvez utiliser la méthode exist().
Merci MikeDavem
Je regarde ce que ca donne demain
__________________
« Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)
olibara 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 00h28.


 
 
 
 
Partenaires

Hébergement Web