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 ?8O
Merci de votre aide
Version imprimable
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 ?8O
Merci de votre aide
bonjour,
Pouvez vous nous donner un jeu de données pour votere cas ?
Merci
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)
Je ne comprends pas votre réponse. Vous voulez détecter les colonnes de type XML qui sont NULL (ou absences de valeurs)
... et vous dites que la solution suivante vous permet de faire cela :Citation:
J'aimerais pouvoir faire un select des rows ayant un champ xml NULL ou Vide
Pour moi vous n'aurez jamais ce que vous demandez initialement.Code:WHERE MaCol IS NOT NULL AND (DATALENGTH(MaCol) < 5)
++
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
Permet d'isoler les champs non null n'ayant pas un contenu signifiantCode:WHERE MaCol IS NOT NULL AND (DATALENGTH(MaCol) < 5)
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 fonctionEnsuite le choix de la longueur en operande depend evidement du contenuCode:DATALENGTH(MaCol)
Dans mon cas il s'est averé que certains rows contenaient ente 0 et 5 blanc
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
Bonjour,
Au passage écrire :
Est équivalent à :Code:WHERE MaCol IS NOT NULL AND (DATALENGTH(MaCol) < 5)
NULL n'est pas une valeur, donc il n'a pas de longueur !Code:WHERE DATALENGTH(MaCol) < 5
@++ ;)
Merci elsuketCitation:
NULL n'est pas une valeur, donc il n'a pas de longueur !
Mais j'ai pris l'habitude de systematiquement tester les NULL explicitement
Ca evite parfois quelques résultat inattendus ;)
Merci MikeDavemCitation:
Dans ce cas je pense que vous pouvez utiliser la méthode exist().
Je regarde ce que ca donne demain