Pregunta

Tengo una "bolsa de propiedades" básica " tabla que almacena atributos sobre mi tabla principal "Tarjeta". Entonces, cuando quiero comenzar a hacer una búsqueda avanzada de tarjetas, puedo hacer algo como esto:

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

Lo que necesito hacer es extraer esta idea en algún tipo de procedimiento almacenado, de modo que, idealmente, pueda pasar una lista de combinaciones de propiedades / valores y obtener los resultados de la búsqueda.

Inicialmente esto será un "estricto" búsqueda, lo que significa que los resultados deben coincidir con todos los elementos de la consulta, pero también me gustaría tener un '' suelto '' consulta para que coincida con cualquiera de los resultados de la consulta.

Parece que no puedo entenderlo. Mi versión anterior de esto era generar una consulta SQL masiva para ejecutar con muchas cláusulas AND / OR, pero espero hacer algo un poco más elegante esta vez. ¿Cómo hago para hacer esto?

¿Fue útil?

Solución

me parece que tiene un EAV aquí. si está utilizando SQL Server 2005 y versiones posteriores, le sugiero que use el tipo de datos XML para esto:

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

hace que la búsqueda y las cosas sean mucho más fáciles con las capacidades incorporadas de consulta xml.

si no puede cambiar su modelo, mire esto:

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top