我有一个应用程序,用于存储有关 XML 列中记录的各种用户定义的数据点。我无法控制这些是如何存储或更新的。
当我查询一列时,它可以返回 3 个值中的 1 个:
$64 问题我想使用 xpath 将这些空字符串作为空值返回。
我找到了很多关于将 null 作为空字符串返回的答案,但没有这样的方法。
当有人删除该值时,他们会以这种方式结束,而不是删除标签,而是将其空白到一个<value />
标签。当从未设置值时会出现空值。他们没有包括 xsi:nil。
我已经用 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)
Run Code Online (Sandbox Code Playgroud)
但这感觉效率低下,而且这不是唯一的列,因此它使代码变得冗长且难以维护。
编辑以包含示例数据
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>" …
Run Code Online (Sandbox Code Playgroud)