SQL XML-запрос, возвращающий пустое значение - PullRequest
2 голосов
/ 08 мая 2019

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

Используемый мной XML:

<collection>
  <object parentid="57ae88af-425e-448f-a0a3-b83738fe51b1" parenttype="Object">
    <fields>
      <field name="ID">
        <value>57</value>
      </field>
    </fields>
  </object>
  <object parentid="57ae88af-425e-448f-a0a3-b83738fe51b1" parenttype="Object">
    <fields>
      <field name="ID">
        <value>58</value>
      </field>
    </fields>
  </object>
</collection>

Значения IЯ хочу прочитать между этими тегами: <value>58</value>

Я использовал этот ответ, чтобы получить код, работающий в первую очередь: SQL-запрос SQL-значения возвращают NULL

Послепробовать различные комбинации из других ответов с помощью «Cross Apply» и т. д.

Код, который я до сих пор работал:

DECLARE @T1 AS XML

  SET @T1 = (
  SELECT
  (CONVERT(XML,p.Selected_Roles))

 FROM [ReportDB1].[dbo].[Job_Roles] AS P
 WHERE p.ID ='27' )

 SELECT 
 t.x.value('value[1]', 'int') AS test
 FROM @T1.nodes('/collection/objects/fields/field') t(x)

Я бы ожидал, что выход каждого значения в теге values ​​будетперечислены в столбце теста.Что на самом деле происходит, я получаю тест столбца, но без строк.

Ответы [ 2 ]

0 голосов
/ 09 мая 2019

Простая опечатка решена проблема, кредит Shnugo: правильный код должен быть:

DECLARE @T1 AS XML

  SET @T1 = (
  SELECT
  (CONVERT(XML,p.Selected_Roles))

 FROM [ReportDB1].[dbo].[Job_Roles] AS P
 WHERE p.ID ='27' )

 SELECT 
 t.x.value('value[1]', 'int') AS test
 FROM @T1.nodes('/collection/objects/fields/field') t(x)
0 голосов
/ 08 мая 2019

IF это для SQL Server - тогда вы можете использовать что-то вроде этого (если вы хотите только значения внутри тегов <value>..</value>):

SELECT
    xc.value('data(.)', 'int')
FROM
    @T1.nodes('/collection/object/fields/field[@name="ID"]/value') AS XT(XC)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...