У меня есть базовая таблица свойств, в которой хранятся атрибуты моей основной таблицы «Карта». Поэтому, когда я хочу начать продвинутый поиск карт, я могу сделать что-то вроде этого:
SELECT dbo.Card.Id, dbo.Card.Name
FROM dbo.Card
INNER JOIN dbo.CardProperty ON dbo.CardProperty.IdCrd = dbo.Card.Id
WHERE dbo.CardProperty.IdPrp = 3 AND dbo.CardProperty.Value = 'Fiend'
INTERSECT
SELECT dbo.Card.Id, dbo.Card.Name
FROM dbo.Card
INNER JOIN dbo.CardProperty ON dbo.CardProperty.IdCrd = dbo.Card.Id
WHERE (dbo.CardProperty.IdPrp = 10 AND (dbo.CardProperty.Value = 'Wind' OR dbo.CardProperty.Value = 'Fire'))
Что мне нужно сделать, это извлечь эту идею в какую-то хранимую процедуру, чтобы в идеале я мог передать список комбинаций свойство / значение и получить результаты поиска.
Изначально это будет «строгий» поиск, означающий, что результаты должны соответствовать всем элементам запроса, но я также хотел бы иметь «свободный» запрос, чтобы он соответствовал любому из результатов в запросе. запрос.
Я не могу обернуться вокруг этого. Моя предыдущая версия заключалась в том, чтобы сгенерировать какой-то массивный SQL-запрос для выполнения с большим количеством предложений AND / OR, но в этот раз я надеюсь сделать что-то более элегантное. Как мне это сделать?