2010-01-08 8 views
1

requête suivante est exécutée avec succès:Vérification de la colonne xml vide

select top(100) * from PackageSessionNodes 
where Cast(ContentInteractions as nvarchar) != '' 

suivante me donne l'erreur taille de la chaîne cible est trop petite pour représenter l'instance XML

update PackageSessionNodes set ContentInteractions = '<contentinteractions />' 
where Cast(ContentInteractions as nvarchar) = '' 

ContentInteractions est une colonne xml. Aucun DDT défini dessus.

Comment puis-je résoudre la deuxième requête de manière à obtenir ces enregistrements avec '' comme xml?

J'ai l'impression que SqlServer ne peut pas traiter les valeurs vides qui sont stockées dans une colonne xml ... mais vous pouvez les insérer ... comment ça?

Répondre

4

Le problème est avec votre CAST. Lorsque vous ne spécifiez pas la longueur de nvarchar, la valeur par défaut est 30 caractères dans la fonction CAST. Alors, que ce que votre déclaration est vraiment dit

update PackageSessionNodes set ContentInteractions = '<contentinteractions />' 
where Cast(ContentInteractions as nvarchar(30)) = '' 

Donc, si le XML contenu de ContentInteractions est sérialisé à plus de 30 caractères, vous obtenez ce problème.