SQL XML查询返回空白值

时间:2019-05-08 14:50:28

标签: sql sql-server xml

我正在尝试设置查询以读取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>

我要读取的值在以下标记之间:<value>58</value>

我使用此答案来使代码首先工作: sql query xml values returning NULL

尝试使用“交叉申请”等其他答案的各种组合

到目前为止,我可以使用的代码:

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 :(得分:0)

IF (这是用于 SQL Server 的)-然后,您可以使用类似的方法(如果您想要 only {{1 }}标签):

<value>..</value>

答案 1 :(得分:0)

一个简单的错字解决问题,应该归功于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)