Question

Je suis la construction d'un système de marquage suggestif (sons miteux), je passe dans une chaîne à la db et s'il y a un match, il renvoie cette balise. Je veux arrêter des balises en double, donc si une balise est WEB, je veux seulement qu'elle soit retournée une fois. Donc, si j'avais WEB comme une étiquette, puis ajouter HEBDOMADAIRE, en tapant « NOUS » ne met pas sur le Web pour une seconde fois comme une suggestion.

Mais, semblent ne fonctionne pas. J'envoie les balises actuelles et utiliser NOT IN () pour supprimer les doublons. Voici le code SP:

SELECT  TOP 1 t.vTagName As vTagName
FROM        Tags t
WHERE       t.vTagName LIKE @vTagName+'%'
AND         t.nTagPortalId = @nPortalId
AND         t.vTagName NOT IN(@vCurrentTags)
ORDER BY    vTagName ASC

Et voici ce get passé dans:

EXEC GetTagSuggest 'We','Web,Print,Design,Advertising,Revenue'

La réponse à cette requête est vTagName = Web. De toute évidence, ce n'est pas un résultat correct car il devrait être vTagName LIKE "Nous" NOT IN "Web, etc ..." ..

Merci d'avance!

Était-ce utile?

La solution

L'instruction IN ne fonctionne pas comme ça.

Qu'est-ce que vous avez à faire est

t.vTagName not in ('Web','Print','Design','Advertising','Revenue')

Avoir dans une variable ne fonctionnera pas dans ce cas.

Autres conseils

Vous devez diviser les chaînes, ou convertir l'intégralité de l'instruction SQL à SQL dynamique.

EDIT:

Diviser des variables par exemple l'autre, ou faire SQL dynamique.

Ce n'est pas la meilleure pratique , mais il est tout simplement pour vous donner une idée:

DECLARE @sql nvarchar(max) = 'SELECT  TOP 1 t.vTagName As vTagName '
SELECT @sql = @sql + 'FROM  Tags t '
SELECT @sql = @sql + 'WHERE t.vTagName LIKE ' + @vTagName + '% '
SELECT @sql = @sql + 'AND   t.nTagPortalId = ' + @nPortalId + ' '
SELECT @sql = @sql + 'AND   t.vTagName NOT IN(' + @vCurrentTags + ') '
SELECT @sql = @sql + 'ORDER BY  vTagName ASC'

EXEC sp_executesql @sql, @vTagName, @nPortalId, @vCurrentTags
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top