【问题标题】:Select query with SQL XML empty element选择带有 SQL XML 空元素的查询
【发布时间】:2021-12-14 02:41:25
【问题描述】:

我编写了一个查询以从 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 中也需要它作为一个空标记,例如 &lt;/BatchEntryId&gt;

请告诉我,如何解决这个问题。

我正在寻找这样的输出:

<RequestRecord>
    <PolicyNumber>Policy034</PolicyNumber>
    <RequestId>2031070233</RequestId>
    <BatchEntryId/>
    <StatusCode>A</StatusCode>
    <PaymentMethodCode>1XCC</PaymentMethodCode>
    <Amount>200.00</Amount>
</RequestRecord>

【问题讨论】:

    标签: sql sql-server sql-server-2012 for-xml


    【解决方案1】:

    你可以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 不是 varcharnvarchar 你应该先施放它

    ISNULL(CAST(BatchEntryId AS varchar(30)), '') AS BatchEntryId
    

    请注意,SQL Server 将其生成为

    <BatchEntryId></BatchEntryId>
    

    然而这在 XML 中的语义等价于

    <BatchEntryId/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-28
      • 1970-01-01
      • 2012-02-13
      • 1970-01-01
      • 2021-03-26
      • 2011-01-04
      • 1970-01-01
      相关资源
      最近更新 更多