sql - 选择带有 SQL XML 空元素的查询
问题描述
我编写了一个查询以从 XML 格式的表中获取数据,但如果列没有任何数据,则它不会在 XML 输出中返回数据。请让我知道如何解决这个问题。
即使它们在带有空标签的表列中没有数据,我也需要获取输出 - 像这样"</BatchEntryId>"
。这BatchEntryId
是表中的NULL
我的查询:
SELECT
Data.value('(/Data/Reference)[1]', 'nvarchar(10)') AS PolicyNumber,
[RequestId],
[BatchEntryId],
[StatusCode],
[PaymentMethodCode],
Data.value('(/Data/Amount)[1]', 'nvarchar(10)') AS Amount
FROM
[dbo].[TransmissionData]
WHERE
RequestId = 2031070233
FOR XML RAW ('RequestRecord'), ELEMENTS, TYPE
我的输出:
<RequestRecord>
<PolicyNumber>Policy034</PolicyNumber>
<RequestId>2031070233</RequestId>
<StatusCode>A</StatusCode>
<PaymentMethodCode>1XCC</PaymentMethodCode>
<Amount>200.00</Amount>
</RequestRecord>
问题是'BatchEntryId'
我没有在输出 XML 中得到,因为该列具有 NULL 值。但我也需要在输出 XML 中作为空标记,就像这样</BatchEntryId>
。
请告诉我,如何解决这个问题。
我正在寻找这样的输出:
<RequestRecord>
<PolicyNumber>Policy034</PolicyNumber>
<RequestId>2031070233</RequestId>
<BatchEntryId/>
<StatusCode>A</StatusCode>
<PaymentMethodCode>1XCC</PaymentMethodCode>
<Amount>200.00</Amount>
</RequestRecord>
解决方案
你可以ISNULL
把它变成一个空字符串
SELECT Data.value('(/Data/Reference)[1]', 'nvarchar(10)') as PolicyNumber
,[RequestId]
,ISNULL([BatchEntryId], '') AS BatchEntryId
,[StatusCode]
,[PaymentMethodCode]
,Data.value('(/Data/Amount)[1]', 'nvarchar(10)') as Amount
FROM [dbo].[TransmissionData]
WHERE RequestId = 2031070233
FOR XML RAW ('RequestRecord'), ELEMENTS, TYPE
如果BatchEntryId
不是varchar
,或者nvarchar
你应该先施放它
ISNULL(CAST(BatchEntryId AS varchar(30)), '') AS BatchEntryId
请注意,SQL Server 将其生成为
<BatchEntryId></BatchEntryId>
然而,这在 XML 中的语义等价于
<BatchEntryId/>
推荐阅读
- java - spring mvc herbinate 在与额外列的多对多关系中存在问题
- node.js - 为什么我的反应应用程序上的 nginx reverse_proxy 在搜索路径时返回 404?
- python-3.x - 如何理解PageRank计算的这种高效实现
- c++ - 计算 Reock 几何紧致度 C++
- pointers - 我可以指向 Fortran 中的可变排名数组吗?
- mysql - 试图在 ubuntu 上设置 wordpress 并想在 mysql 中授予权限
- python - 我怎样才能让我的代码工作,一旦我运行它,我就一直没有定义名称
- regex - 阿帕奇位置匹配
- javascript - 如何在 PayPal 智能按钮交易中发送自定义数据字段
- javascript - 如何访问使用 = 而不是键值对的对象中的属性