Не удается получить XML-уничтожение для работы в SQL Server 2012 из столбца типов данных XML в таблицы - PullRequest
0 голосов
/ 20 сентября 2019

Я не получаю никаких результатов, так что я делаю не так?

Я пробовал примеры, приведенные на этом форуме и в технической документации.

Это данные втаблица с именем OrderStatusResponse_2019 в столбце с именем Response_XML с типом данных XML.Я пытаюсь вернуть тип результата для этого xml с этим кодом.

DECLARE @Table TABLE (Response_XML XML)

INSERT INTO @Table (Response_XML) 
VALUES (<orderStatusSummaryReply xmlns="http://www.airversent.com/integration" transactionId="1" timestamp="2019-01-21T21:13:19.144Z">
  <result>
    <resultType>success</resultType>
  </result>
</orderStatusSummaryReply>)

SELECT
    XC.value('(resultType)[1]', 'NVARCHAR(10)') AS [ResultType]
FROM
    OrderStatusResponse_2019
CROSS APPLY
    Response_XML.nodes('/orderStatusSummaryReply/result') as T2(XC)

Я получаю 0 возвращенных строк.Почему?

Я должен вернуться на один ряд с успехом в нем.Я получаю 0 строк.

1 Ответ

1 голос
/ 20 сентября 2019

Ваш XML имеет пространство имен по умолчанию.Вам нужно указать его, иначе запрос не будет работать.

-- DDL and sample data population, start
DECLARE @tbl TABLE (ID INT IDENTITY(1,1) PRIMARY KEY, Response_XML XML);

INSERT INTO @tbl (Response_XML) 
VALUES (N'<orderStatusSummaryReply xmlns="http://www.airversent.com/integration" transactionId="1" timestamp="2019-01-21T21:13:19.144Z">
  <result>
    <resultType>success</resultType>
  </result>
</orderStatusSummaryReply>');
-- DDL and sample data population, end

;WITH XMLNAMESPACES(DEFAULT 'http://www.airversent.com/integration')
SELECT 
    ID,
    c.value('(resultType/text())[1]', 'VARCHAR(10)') AS [ResultType]
FROM 
    @tbl
CROSS APPLY 
    Response_XML.nodes('/orderStatusSummaryReply/result') AS t(c);

Вывод

+----+------------+
| ID | ResultType |
+----+------------+
|  1 | success    |
+----+------------+
...