J'ai une application qui stocke divers points de données définis par l'utilisateur sur un enregistrement dans une colonne XML. Je n'ai aucun contrôle sur la façon dont ceux-ci sont stockés ou mis à jour.
Lorsque je recherche une colonne, elle peut renvoyer 1 valeur sur 3:
- La valeur
- Nul
- Une chaîne vide
$ 64 question Je voudrais renvoyer ces chaînes vides sous forme de null en utilisant xpath.
J'ai trouvé beaucoup de réponses sur le retour du null comme une piqûre vide mais rien de cette façon.
Ils finissent de cette façon lorsque quelqu'un a supprimé la valeur et au lieu de supprimer la balise, il la vide en une <value />
balise. Les valeurs NULL se produisent lorsque la valeur n'a jamais été définie. Ils n'ont pas inclus xsi: nil.
Je l'ai fait avec une déclaration de cas:
select
so.SalesOrderId,
Case
when sopc.value('(Value)[1]','smalldatetime') IS null then Null
when sopc.value('(Value)[1]','smalldatetime') ='' then Null
Else sopc.value('(Value)[1]','smalldatetime')
End as sopc
From
SalesOrders so
Outer apply so.CustomColumns.nodes('/CustomColumnsCollection/CustomColumn[Name="ProjCompleted"]') sopc(sopc)
mais cela semble inefficace et ce n'est pas la seule colonne donc cela rend le code long et plus difficile à maintenir.
Modifier pour inclure des exemples de données
SalesOrderId CustomColumns
SO 1 "<CustomColumnsCollection>
<CustomColumn>
<Name>ProjCompleted</Name>
<DataType>1</DataType>
<Value />
</CustomColumn>
</CustomColumnsCollection>"
SO 2 "<CustomColumnsCollection>
<CustomColumn>
<Name>ProjCompleted</Name>
<DataType>1</DataType>
<Value>'2017-11-21'</Value>
</CustomColumn>
</CustomColumnsCollection>"
SO 3 "<CustomColumnsCollection>
</CustomColumnsCollection>"
**Output**
Current Desired
'' null
2017-11-21 2017-11-21
null null
Merci d'avance.
la source
Réponses:
Spécifiez le
text()
nœud dans l'Value
élément. Ce nœud est manquant lorsque vous avez une balise vide.Essaye ça:
Résultat:
C'est une bonne chose en général de toujours spécifier le
text()
nœud. Le plan de requête est plus simple et plus efficace.la source