Я храню данные XML в таблице с именем BikeTable
.Данные XML поступают от объекта, который сериализуется с использованием сериализатора .Net.BikeTable будет выглядеть так:
Id - UniqueIdentifier
XmlData - XML
XML, хранящийся в столбце XmlData
, выглядит следующим образом:
Запись 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 and Mountain.
Пример, если я хочу, чтобы идентификаторы записи, содержащей «Дорога» и «Гора», я нашел только так:
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 и т. д.
Можно ли узнать, содержит ли список несколько значений?