Как опустить определенные значения при генерации XML из SQL (MS SQL Server) - PullRequest
0 голосов
/ 11 апреля 2019

Мы генерируем XML из нашего MS SQL Server, и мы хотим опустить 0 значений для одного сгенерированного тега, который не будет сгенерирован в отчете XML.

Где условие не помогает, как тогда завершить тегструктура опущена, а не только одно значение.

SELECT                                     
    CONVERT(VARCHAR(255), [BONUS_AMOUNT]) AS [06_BONUS_AMOUNT]     ,
    CONVERT(VARCHAR(255), [MAXIMUM_AMOUNT]) AS [07_MAXIMUM_AMOUNT]
FROM #xmldatarider rid

Как сгенерировать тег XML для определенного столбца, только если значение не равно нулю, пожалуйста?

так скажем, этострока будет опущена:

<tns:attributeCurrency xmlns:tns="BigDataFeed" idx="4" col="4" name="BONUS_AMOUNT" value="0" currency="EUR" />

Но она будет сохранена, если есть другое значение, отличное от 0.

Действительно упрощенная версия: у меня есть таблица, из которой я создаю файл XML: code: SELECT PolicyKey, PremiumDebtAmount, DebtKey FROM [DWH].[tgt].[Debt] where PolicyKey IN (4,5) for xml PATH('Debt'), elements go

Результат - 2 родительских тега XML, оба с 3 значениями:

<Debt> <PolicyKey>4</PolicyKey> <PremiumDebtAmount>7.47</PremiumDebtAmount> <DebtKey>241547</DebtKey> </Debt> <Debt> <PolicyKey>5</PolicyKey> <PremiumDebtAmount>5.28</PremiumDebtAmount> <DebtKey>241548</DebtKey> </Debt>

Я не хочу показывать тег PremiumDebtAmount, когда онs 5.28.<br> I can t использовать условие where, потому что все теги из parent затем опускаются.

Код:

SELECT PolicyKey, PremiumDebtAmount, DebtKey 
FROM [DWH].[tgt].[Debt] 
where PolicyKey IN (4,5) and PremiumDebtAmount<>5.28 
for xml PATH('Debt'), elements

Результат:

<Debt> 
    <PolicyKey>4</PolicyKey> 
    <PremiumDebtAmount>7.47</PremiumDebtAmount> 
    <DebtKey>241547</DebtKey> 
</Debt>

Что мне нужно увидеть:

<Debt> 
    <PolicyKey>4</PolicyKey> 
    <PremiumDebtAmount>7.47</PremiumDebtAmount> 
    <DebtKey>241547</DebtKey> 
</Debt> 
<Debt> 
    <PolicyKey>5</PolicyKey> 
    <DebtKey>241548</DebtKey> 
</Debt> 

И мой вопрос, как:)

Спасибо

1 Ответ

0 голосов
/ 11 апреля 2019

Вот решение несколько упрощенной версии вашей проблемы, показывающее использование вложенного типизированного XML:

DECLARE @Debt TABLE (
    PolicyKey NVARCHAR(100),
    PremiumDebtAmount DECIMAL(5, 2),
    DebtKey INT
)
INSERT @Debt VALUES (4, 7.47, 241547), (5, 5.28, 241548)

SELECT 
    PolicyKey, 
    (
        SELECT PremiumDebtAmount 
        WHERE PremiumDebtAmount <> 5.28
        FOR XML PATH(''), TYPE
    ),
    DebtKey
FROM @Debt
FOR XML PATH('Debt')

Результат:

<Debt>
    <PolicyKey>4</PolicyKey>
    <PremiumDebtAmount>7.47</PremiumDebtAmount>
    <DebtKey>241547</DebtKey>
</Debt>
<Debt>
    <PolicyKey>5</PolicyKey>
    <DebtKey>241548</DebtKey>
</Debt>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...