Utiliser une clause LIKE dans une partie d'un INNER JOIN

Peux/dois-je utiliser COMME critères dans le cadre d'une JOINTURE INTERNE lors de la construction d'une procédure stockée/requête? Je ne suis pas sûr que je suis de se poser les bonnes chose, laissez moi vous expliquer.

Je suis de créer une procédure qui va prendre une liste de mots-clés pour la recherche dans une colonne qui contient du texte. Si j'étais assis à la console, j'avais l'exécuter en tant que tel:

SELECT Id, Name, Description
  FROM dbo.Card
 WHERE Description LIKE '%warrior%' 
       OR
       Description LIKE '%fiend%' 
       OR 
       Description LIKE '%damage%'

Mais un truc que j'ai ramassé un peu de temps aller à faire "fortement typé" liste de l'analyse dans une procédure stockée est d'analyser la liste dans une variable de table/table temporaire, de la convertir dans le type approprié et ensuite de faire une JOINTURE INTERNE sur la table dans mon dernier jeu de résultats. Cela fonctionne très bien lors de l'envoi de dire une liste de integer Id de la procédure. Je me retrouve à avoir une dernière requête qui ressemble à ceci:

SELECT Id, Name, Description
  FROM dbo.Card
       INNER JOIN @tblExclusiveCard ON dbo.Card.Id = @tblExclusiveCard.CardId

Je veux utiliser cette astuce avec une liste de chaînes de caractères. Mais depuis que je suis à la recherche pour un mot clé particulier, je vais utiliser la clause LIKE. Donc, idéalement, je pense que j'aurais ma dernière requête ressembler à ceci:

SELECT Id, Name, Description
  FROM dbo.Card
       INNER JOIN @tblKeyword ON dbo.Card.Description LIKE '%' + @tblKeyword.Value + '%'

Est-ce possible/recommandé?

Est-il une meilleure façon de faire quelque chose comme cela?


La raison pour laquelle je suis en train de mettre des caractères génériques sur les deux extrémités de la clause est parce qu'il y a "diablotin", "la bête-guerrier", "directe-dommages" et "bataille des dommages", des termes qui sont utilisés dans la carte de textes.

Je reçois l'impression qu'en fonction de la performance, je peux soit utiliser la requête que j'ai précisé ou de l'utilisation d'un plein-texte recherche par mot-clé pour accomplir la même tâche?

Autre que d'avoir le serveur de faire un index de texte dans les champs, je veux de la recherche de texte, est-il autre chose que je dois faire?

source d'informationauteur Dillie-O