Frage

Ich habe eine grundlegende „Property Bag“ Tabelle, die Geschäfte über meine primären Tabellenattribute „Karte“. Also, wenn ich für Karten tun einige erweiterte Suche beginnen soll, kann ich so etwas tun:

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

Was ich tun muß, ist diese Idee in eine Art gespeicherte Prozedur zu extrahieren, so dass im Idealfall kann ich in einer Liste von Eigenschaft / Wert-Kombinationen übergeben und die Ergebnisse der Suche erhalten.

Am Anfang das wird eine „strenge“ Suche sein bedeutet, dass die Ergebnisse alle Elemente in der Abfrage übereinstimmen müssen, aber ich würde auch eine „lose“ Abfrage haben möge, so dass es eine der Ergebnisse in denen entsprechen würde Abfrage.

Ich kann nicht ganz scheinen, meinen Kopf um diese zu wickeln. Meine frühere Version diese war einig massive SQL-Abfrage zu tun, erzeugt mit einer Menge von AND / OR-Klauseln in ihm auszuführen, aber ich bin die Hoffnung, etwas mehr elegant diesmal zu tun. Wie gehe ich um dies zu tun?

War es hilfreich?

Lösung

es scheint mir, dass Sie einen EAV Modell. Wenn Sie SQL Server 2005 verwenden und ginge, würde ich vorschlagen, verwenden Sie XML-Datentyp für diese:

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

macht das Suchen und Sachen viel einfacher, mit in XML-Abfrage-Funktionen eingebaut.

, wenn Sie nicht Ihr Modell dann aussehen ändern:

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top