属性"x"已知"y"的 T-SQL XQuery 值



我正在尝试查询非类型化XML数据的XML字段以进入存储过程。

该字段具有多个同名元素,并且每个元素具有多个属性。查询需要返回c的值,其中r(字段中的唯一值)的值是已知的。 例如。返回下面 XML 字段中属性c的值,其中属性r的值为"FGH"。r 的每个值都是唯一的,因此只返回一行。

<Assets>
<Cars>
<Car r="ABC" c="Nissan" t="petrol"/>
<Car r="FGH" c="VW" t="petrol"/>
<Car r="XYZ" c="Mini" t="diesel"/>
</Cars>
</Assets>

我尝试过的查询的编辑版本是:

USE MyDB
DECLARE           
@ASSETS XML = null,
@car nvarchar(50)
SELECT @ASSETS = ASSETS FROM MyTable WHERE ID = 26800
SELECT @car = @ASSETS.value('(//*/*/@FGH', 'nvarchar(max)') ;

我可以看到这是不对的,但完全卡住了。

因此,您希望在具有值为FGHr属性的元素(任何名称)上显示c属性的值。您想要的路径是:

//*[@r='FGH']/@c

根据获取值的方式,可能需要显式获取单例值。例:

DECLARE @xml xml = '<Assets>
<Cars>
<Car r="ABC" c="Nissan" t="petrol"/>
<Car r="FGH" c="VW" t="petrol"/>
<Car r="XYZ" c="Mini" t="diesel"/>
</Cars>
</Assets>
';
SELECT @xml.value('(//*[@r="FGH"]/@c)[1]', 'nvarchar(max)');

结果:

----------------------
VW
(1 row(s) affected)

( )[1]是让 SQL Server 相信您获得的是单个值。

最新更新