【问题标题】:How do I search a "Property Bag" table in SQL?如何在 SQL 中搜索“Property Bag”表?
【发布时间】:2009-01-19 17:53:03
【问题描述】:

我有一个基本的“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 子句,但我希望这次能做一些更优雅的事情。我该怎么做?

【问题讨论】:

    标签: sql-server stored-procedures union intersection entity-attribute-value


    【解决方案1】:

    在我看来,您在这里有一个EAV 模型。 如果您使用的是 sql server 2005 及更高版本,我建议您为此使用 XML 数据类型:

    http://weblogs.sqlteam.com/mladenp/archive/2006/10/14/14032.aspx

    借助内置的 xml 查询功能,让搜索和查找工作变得更加容易。

    如果你不能改变你的模型,那么看看这个:

    http://weblogs.sqlteam.com/davidm/articles/12117.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-25
      • 2023-01-09
      • 2010-09-26
      • 1970-01-01
      相关资源
      最近更新 更多