【发布时间】:2018-05-14 18:02:35
【问题描述】:
我将 XML 数据存储到名为 BikeTable 的表中。 XML 数据来自使用 .Net 序列化程序进行序列化的对象。
BikeTable 看起来像这样:
Id - UniqueIdentifier
XmlData - XML
XmlData 列中存储的 XML 如下所示:
记录 1:
<Bike>
<Material>
<Cage>EIECH</Cage>
<Mpn>B258-C436-B001</
</Material>
<Roles>
<string>Race</string>
<string>Mountain</string>
<string>City</string>
</Roles>
</Bike>
记录 2:
<Bike>
<Material>
<Cage>ABCDE</Cage>
<Mpn>B258-C436-B001</Mpn>
</Material>
<Roles>
<string>Race</string>
</Roles>
</Bike>
我希望能够在我的表中找到将包含例如 Race 和 Mountain 的记录。
例如,如果我想要包含“Road”和“Mountain”的记录的 ID,我找到的唯一方法是这样的:
select Id
from BikeTable
where XmlData.exist('/Bike/Roles/string[contains(., "Road")]') = 1
or XmlData.exist('/Bike/Roles/string[contains(., "Mountain")]') = 1
我不喜欢这个选项,因为如果我想查找匹配一个或多个角色的记录,它会强制我生成查询。 角色可以包含无限数量的值,我需要能够找到包含一个或多个值的记录。 例如:包含 Race 的记录、包含 Race 或 Montain 的记录、包含 City 的记录、包含 City 和 Mountain 的记录等。
有什么方法可以知道一个列表是否包含多个值?
【问题讨论】:
标签: sql-server xquery-sql