Sql server 名称-值对的SQL XML查询?
首先,我要指出,在XML中使用nvp并不是我的选择,它正在被修改。也就是说,我有一个表,其中包含一个XML列,该列具有以下XML:Sql server 名称-值对的SQL XML查询?,sql-server,xml,Sql Server,Xml,首先,我要指出,在XML中使用nvp并不是我的选择,它正在被修改。也就是说,我有一个表,其中包含一个XML列,该列具有以下XML: <root> <results> <result name='First Result'> <property name='Property1' value='Value1' /> <property name='Property2' value='Value2' />
<root>
<results>
<result name='First Result'>
<property name='Property1' value='Value1' />
<property name='Property2' value='Value2' />
</result>
</results>
</root>
但我不确定我如何才能把房子展示出来。我尝试了以下方法:
SELECT
T.N.value('@name', 'nvarchar(256)') AS resultName,
T.N.value('/property[@name="Property1"]/@value', 'nvarchar(256)') AS Property
FROM
results CROSS APPLY xmlField.nodes('/root/results/result') AS T(N)
但我得到了以下错误:
XQuery[results.xmlField.value()]:“value()”需要单例(或空序列),找到的操作数类型为“xdt:untypedAtomic*”
我知道我走的是正确的道路,但我不太确定我到底应该做什么。有人能给我指出正确的方向吗?这就是你要找的吗
SELECT
T.N.value('../@name','varchar(255)') as resultName,
T.N.value('@name', 'nvarchar(256)') AS Propertyname ,
T.N.value('@value', 'nvarchar(256)') as Value
FROM
results
cross apply
xmlfield.nodes('/root/results/result/property') AS T(N)
where
T.N.value('@name', 'nvarchar(256)') ='property1'
或
这就是你想要的吗
SELECT
T.N.value('../@name','varchar(255)') as resultName,
T.N.value('@name', 'nvarchar(256)') AS Propertyname ,
T.N.value('@value', 'nvarchar(256)') as Value
FROM
results
cross apply
xmlfield.nodes('/root/results/result/property') AS T(N)
where
T.N.value('@name', 'nvarchar(256)') ='property1'
或
尝试查找xpath中的第一个匹配节点
SELECT organizationDeviceId,
T.N.value('@name', 'nvarchar(256)') AS resultName,
T.N.value('(/property[@name="Property1"])[1]/@value', 'nvarchar(256)') AS Property
FROM results CROSS APPLY xmlField.nodes('/root/results/result') AS T(N)
我不能100%确定结果,但需要使用
[1]
查找第一个结果。尝试查找xpath中的第一个匹配节点
SELECT organizationDeviceId,
T.N.value('@name', 'nvarchar(256)') AS resultName,
T.N.value('(/property[@name="Property1"])[1]/@value', 'nvarchar(256)') AS Property
FROM results CROSS APPLY xmlField.nodes('/root/results/result') AS T(N)
我不能100%确定结果,但需要使用
[1]
查找第一个结果。关闭,但我希望在选择的字段中提供筛选,因为这将允许我精确控制要返回的属性。谢谢。我想我还是没有很好地解释我在寻找什么。where子句将其仅限于一个实体。我特别尝试在xquery中进行过滤,这样我就可以用已知的属性名对字段进行别名。我想这更像是一个xquery问题。谢谢你的帮助,你的回答让我有了更多的想法。我想你可能想要的是sql:variable()
语法?这正是我想要的!每次我尝试使用/property
而不是/property
,但这就解决了问题!非常感谢。请关闭,但我希望在“选择”字段中提供筛选,因为这将允许我准确控制要返回的属性。谢谢。我想我还是没有很好地解释我在寻找什么。where子句将其仅限于一个实体。我特别尝试在xquery中进行过滤,这样我就可以用已知的属性名对字段进行别名。我想这更像是一个xquery问题。谢谢你的帮助,你的回答让我有了更多的想法。我想你可能想要的是sql:variable()
语法?这正是我想要的!每次我尝试使用/property
而不是/property
,但这就解决了问题!非常感谢。我尝试了查询,但属性字段的值为NULL。这给了我一些关于尝试的想法。谢谢。我尝试了查询,但属性字段的值为NULL。这让我对需要尝试的事情有了更多的想法。