Pergunta

Eu tenho uma tabela básica "saco de propriedade" que armazena atributos sobre a minha principal mesa "Cartão". Então, quando eu quero começar a fazer alguma pesquisa avançada para cartões, eu posso fazer algo como isto:

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'))

O que eu preciso fazer é extrair essa idéia em algum tipo de procedimento armazenado, de modo que, idealmente, eu posso passar em uma lista de propriedades combinações / valor e obter os resultados da pesquisa.

Inicialmente, esta vai ser uma "rigorosa" procurar o que significa que os resultados devem corresponder a todos os elementos da consulta, mas eu também gostaria de ter um "perder" consulta para que ele iria coincidir com qualquer um dos resultados do consulta.

Não consigo bastante parecem envolver minha cabeça em torno deste. Minha versão anterior desta era fazer gerar alguma consulta maciça SQL para executar com muita E / OU cláusulas nele, mas eu estou esperando para fazer algo um pouco mais elegante neste momento. Como eu vou fazer isso?

Foi útil?

Solução

parece-me que você tem uma href="http://en.wikipedia.org/wiki/Entity-Attribute-Value_model" rel="nofollow noreferrer"> EAV modelo

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

torna a pesquisa e outras coisas muito mais fácil com construído em capacidades xml consulta.

Se você não pode mudar o seu modelo, em seguida, olhar para este:

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top