我有一个基本的“property bag”表,用于存储有关我的主表“Card”的属性。所以当我想开始做一些高级的卡片搜索时,我可以这样做:
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 子句,但我希望这次能做一些更优雅的事情。我该怎么做呢?