Синтаксический анализ T-SQL с пустым значением - PullRequest
1 голос
/ 15 апреля 2019

Я прошел через многочисленные вопросы по этому вопросу, и ни одна из этих резолюций, похоже, не работает.У меня есть следующий XML:

DECLARE @XML xml;
SELECT @XML ='<?xml version="1.0" encoding="UTF-8"?>
<hb:MedicalAidMessage xmlns:hb="bridge.co.za/mes" Version="6.0.0">
    <Claim>
        <Details>
            <LineItems>
                <LineItem>
                    <HBBatchNum>2414</HBBatchNum>
                </LineItem>
            </LineItems>
        </Details>
    </Claim>
</hb:MedicalAidMessage>';

и этот код для его анализа:

;WITH XMLNAMESPACES ('bridge.co.za/mes' as ns)
SELECT
    ISNULL(T.N.value('HBBatchNum[1]', 'INT'), 0) AS BatchNo
FROM
    @XML.nodes('/Claim/Details/LineItems/LineItem[1]') AS T(N)

, который возвращает пустое значение вместо 2414. В реальном запросе XML хранится встолбец таблицы.Я просто не могу понять, почему я не получаю значение узла.

1 Ответ

4 голосов
/ 15 апреля 2019

Это довольно очевидно ... Claim не корневой элемент.Поэтому используйте один из следующих вариантов:

WITH XMLNAMESPACES ('bridge.co.za/mes' AS ns)
SELECT ISNULL(T.N.value('HBBatchNum[1]', 'int'),0) AS BatchNo
FROM @XML.nodes('/ns:MedicalAidMessage/Claim/Details/LineItems/LineItem[1]') AS T(N)

-- WITH XMLNAMESPACES ('bridge.co.za/mes' AS ns)
SELECT ISNULL(T.N.value('HBBatchNum[1]', 'int'),0) AS BatchNo
FROM @XML.nodes('/*:MedicalAidMessage/Claim/Details/LineItems/LineItem[1]') AS T(N)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...