Ho un'applicazione che memorizza vari punti dati definiti dall'utente su un record in una colonna XML. Non ho alcun controllo su come questi sono memorizzati o aggiornati.
Quando eseguo una query su una colonna, può restituire 1 di 3 valori:
- Il valore
- Nullo
- Una stringa vuota
$ 64 domanda Vorrei restituire quelle stringhe vuote come null utilizzando xpath.
Ho trovato molte risposte su come restituire il null come una puntura vuota, ma nulla in questo modo.
Finiscono in questo modo quando qualcuno ha eliminato il valore e invece di eliminare il tag lo cancella in un <value />
tag. I valori null si verificano quando il valore non è mai stato impostato. Non hanno incluso xsi: nil.
L'ho fatto con un'istruzione case:
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)
ma questo sembra inefficiente e questa non è l'unica colonna, quindi rende il codice lungo e più difficile da mantenere.
Modifica per includere dati di esempio
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
Grazie in anticipo.