我正在尝试设置查询以读取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标记中每个值的输出都会在列测试中列出。实际发生的是我得到列测试但没有行。
答案 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)