Tôi có một ứng dụng lưu trữ các điểm dữ liệu do người dùng xác định khác nhau về một bản ghi trong một cột XML. Tôi không kiểm soát được cách thức chúng được lưu trữ hoặc cập nhật.
Khi tôi truy vấn một cột, nó có thể trả về 1 trong 3 giá trị:
- Giá trị
- Vô giá trị
- Một chuỗi rỗng
Câu hỏi $ 64 Tôi muốn trả về các chuỗi trống đó dưới dạng null bằng xpath.
Tôi đã tìm thấy rất nhiều câu trả lời về việc trả lại null dưới dạng sting trống nhưng không có gì theo cách này.
Họ kết thúc theo cách đó khi ai đó đã xóa giá trị và thay vì xóa thẻ, nó sẽ xóa nó thành một <value />
thẻ. Các null xảy ra khi giá trị chưa bao giờ được đặt. Họ chưa bao gồm xsi: nil.
Tôi đã thực hiện nó với một tuyên bố trường hợp:
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)
nhưng điều này cảm thấy không hiệu quả và đây không phải là cột duy nhất nên nó làm cho mã dài hơn và khó bảo trì hơn.
Chỉnh sửa để bao gồm dữ liệu mẫu
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
Cảm ơn trước.