我做了很多研究,似乎无法将SQL串起来从XML字段中提取所需的数据。
<vItem>
<jobScript>
<node guid="7606bd90-98df-4572-accd-5b41ec5605dc">
<subNodes>
<node guid="17f8e275-d4f6-47c0-a5e4-80da658f4097">
<execute taskVersionGuid="5fc17d5c-7264-461f-ae38-753d703f3c99" />
</node>
<node guid="5fe2233c-9e3a-44be-aa20-aea2c8dcbd4a">
<execute taskVersionGuid="f55dc069-46ff-427e-920f-5f1c3fc3ad09" />
</node>
<node guid="ecd6a7b5-a3be-483c-acf8-64ba1c289088">
<execute taskVersionGuid="5220d97c-6e8f-400a-b814-aa7d84942c20" />
</node>
</subNodes>
</node>
</jobScript>
我正在尝试从每个节点中提取taskVersionGuid。在这个场景中,可能有1到10个taskVersionGuids,但我上面的例子有3个。
对此有任何帮助将不胜感激。
由于
修改
我也尝试了下面的内容:
declare @XML xml
set @XML =
'
<vItem>
<jobScript>
<node guid="7606bd90-98df-4572-accd-5b41ec5605dc">
<subNodes>
<node guid="17f8e275-d4f6-47c0-a5e4-80da658f4097">
<execute taskVersionGuid="5fc17d5c-7264-461f-ae38-
753d703f3c99" />
</node>
<node guid="5fe2233c-9e3a-44be-aa20-aea2c8dcbd4a">
<execute taskVersionGuid="f55dc069-46ff-427e-920f-
5f1c3fc3ad09" />
</node>
<node guid="ecd6a7b5-a3be-483c-acf8-64ba1c289088">
<execute taskVersionGuid="5220d97c-6e8f-400a-b814-
aa7d84942c20" />
</node>
</subNodes>
</node>
</jobScript>
</vItem>
'
select T.N.query('.')
from @XML.nodes('/vItem/jobScript/node/subNodes/node/execute') as T(N)
然而,这导致以下结果:
<execute taskVersionGuid="5fc17d5c-7264-461f-ae38-753d703f3c99" />
<execute taskVersionGuid="f55dc069-46ff-427e-920f-5f1c3fc3ad09" />
<execute taskVersionGuid="5220d97c-6e8f-400a-b814-aa7d84942c20" />
而我正试图获得taskVersionGuid的价值。
再次感谢。
答案 0 :(得分:2)
回答如下:
select T.N.value('@taskVersionGuid[1]', 'uniqueidentifier')
from @XML.nodes('/vItem/jobScript/node/subNodes/node/execute') as T(N)
答案 1 :(得分:0)
您需要做的是将xml转换为表格以便查询。下面是您需要从节点中获取值的查询示例。
DECLARE @xml AS XML = '<jobScript>
<node guid="7606bd90-98df-4572-accd-5b41ec5605dc">
<subNodes>
<node guid="17f8e275-d4f6-47c0-a5e4-80da658f4097">
<execute taskVersionGuid="5fc17d5c-7264-461f-ae38-753d703f3c99" />
</node>
<node guid="5fe2233c-9e3a-44be-aa20-aea2c8dcbd4a">
<execute taskVersionGuid="f55dc069-46ff-427e-920f-5f1c3fc3ad09" />
</node>
<node guid="ecd6a7b5-a3be-483c-acf8-64ba1c289088">
<execute taskVersionGuid="5220d97c-6e8f-400a-b814-aa7d84942c20" />
</node>
</subNodes>
</node>
</jobScript>'
SELECT a.value('.', 'varchar(max)')
FROM @xml.nodes('/jobScript/node/subNodes/node/execute/@taskVersionGuid') a(a)