Kann/Soll ich ein LIKE-Kriterium als Teil eines INNER JOIN beim Erstellen einer gespeicherten Prozedur/Abfrage verwenden? Ich bin mir nicht sicher, ob ich das Richtige verlange, also lass es mich erklären.Verwenden Sie eine LIKE-Klausel in einem INNEREN JOIN
Ich erstelle eine Prozedur, die eine Liste der zu suchenden Schlüsselwörter in einer Spalte mit Text enthält. Wenn ich an der Konsole saß, würde ich es als solche auszuführen:
SELECT Id, Name, Description
FROM dbo.Card
WHERE Description LIKE '%warrior%'
OR
Description LIKE '%fiend%'
OR
Description LIKE '%damage%'
Aber ein Trick, den ich eine Weile gehen abgeholt zu tun „stark typisierte“ -Liste Parsen in eine gespeicherte Prozedur, die Liste zu analysieren ist in eine Tabellenvariable/temporäre Tabelle, wandle sie in den richtigen Typ um und mache dann einen INNEREN JOIN gegen diese Tabelle in meiner endgültigen Ergebnismenge. Dies funktioniert hervorragend, wenn Sie eine Liste von Integer-IDs an die Prozedur senden. Ich habe eine endgültige Abfrage, die wie folgt aussieht:
SELECT Id, Name, Description
FROM dbo.Card
INNER JOIN @tblExclusiveCard ON dbo.Card.Id = @tblExclusiveCard.CardId
Ich möchte diesen Trick mit einer Liste von Zeichenfolgen verwenden. Aber da ich nach einem bestimmten Schlüsselwort suche, werde ich die LIKE-Klausel verwenden. Idealerweise denke ich, dass meine letzte Abfrage so aussehen würde:
Ist das möglich/empfohlen?
Gibt es einen besseren Weg, so etwas zu tun?
Der Grund Ich setze Wildcards an beiden Enden der Klausel ist, weil es „archfiend“, „Tier-Krieger“, „Direkt Schaden“ und „Kampf-Schaden“ Begriffe, die in verwendet werden, die Kartentexte.
Ich habe den Eindruck, dass ich abhängig von der Leistung entweder die angegebene Abfrage verwenden oder eine Volltext-Stichwortsuche verwenden kann, um die gleiche Aufgabe zu erfüllen?
Abgesehen davon, dass der Server einen Textindex für die Felder erstellt, für die ich eine Textsuche durchführen möchte, muss ich noch etwas anderes tun?
ich denke, das 'CONCAT sein sollte ('%', a.type, '%')' http.: //stackoverflow.com/a/23276513/443900 – Lee