我有一个带有以下给定格式的xml变量,我确实需要通过dinamically读取并加载一些T-SQL结构中的元素名称及其各自的字段值:
declare @InputXml xml
Set @InputXml = '<Root RootName="rooNameValueHere">
<Element Name="elementName">
<SubElement Field="subelementFielName"/>
</Element>
<Element Name="otherElementName">
<SubElement Field="subelementFielName1"/>
<SubElement Field="subelementFielName2"/>
<SubElement Field="subelementFielName3"/>
</Element>
</Root>'
提示: 1 - Root可以包含N个元素 2 - 每个元素可以包含N个子元素 3 - 我需要创建一个能够检索所有信息并且能够通过提供一个元素名称(e.i:给定元素,返回其所有子元素)过滤掉的例程。
现在,我已经编写了这个T-SQL来获取给定一个元素名称的subElements但是我得到一个空值:
select
t.c.value('@Field', 'nvarchar(10)') AS SomeAlias
from
@InputXml.nodes('N/Root/Element[@Name = ''elementName'']//SubElement') t(c);
解决方案:
这post帮助我解决了我的问题。感谢所有回复的人。
答案 0 :(得分:2)
我从查询开头删除了'N'char,它可以工作:)
@InputXml.nodes('/Root/Element2[@Name = ''otherElementName'']//SubElement') t(c);
答案 1 :(得分:1)
试试这个:
select
t.c.value('@Field', 'nvarchar(100)') AS SomeAlias
from
@InputXml.nodes(N'/Root/Element[@Name = "elementName"]/SubElement') t(c);
结果:
subelementFielName