Ich habe eine Anwendung, die verschiedene benutzerdefinierte Datenpunkte zu einem Datensatz in einer XML-Spalte speichert. Ich habe keine Kontrolle darüber, wie diese gespeichert oder aktualisiert werden.
Wenn ich eine Spalte abfrage, kann sie 1 von 3 Werten zurückgeben:
- Der Wert
- Null
- Eine leere Zeichenfolge
$ 64 Frage Ich möchte diese leeren Zeichenfolgen mit xpath als Nullen zurückgeben.
Ich habe viele Antworten gefunden, um die Null als leeren Stich zurückzugeben, aber nichts in dieser Richtung.
Sie enden auf diese Weise, wenn jemand den Wert gelöscht hat, und anstatt das Tag zu löschen, wird es zu einem <value />
Tag ausgeblendet. Die Nullen treten auf, wenn der Wert nie festgelegt wurde. Sie haben xsi: nil nicht enthalten.
Ich habe es mit einer Fallaussage gemacht:
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)
Dies fühlt sich jedoch ineffizient an und ist nicht die einzige Spalte, sodass der Code lang und schwieriger zu warten ist.
Bearbeiten, um Beispieldaten einzuschließen
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
Danke im Voraus.