Pregunta

Estoy construyendo un sistema de etiquetado sugerente (suena de mala muerte), paso en una cadena a la base de datos y si hay un partido que devuelve esa etiqueta. Quiero dejar de etiquetas duplicadas, por lo que si una etiqueta es WEB, yo sólo quiero que se devuelve una vez. Así que si tuviera web como una etiqueta y luego añadir SEMANAL, escribiendo "WE" no aparezca WEB por segunda vez como una sugerencia.

Sin embargo, parece ser que no trabaja. Puedo enviar las etiquetas actuales y lo use en () para eliminar los duplicados. A continuación se muestra el código 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

Y esto es lo que obtener de pasadas en:

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

La respuesta a esta pregunta es vTagName = Web. Obviamente, esto no es un resultado correcto como debe ser vTagName COMO "Nosotros", no en "Web, etc ..." ..

Gracias de antemano!

¿Fue útil?

Solución

La declaración IN no funciona de esa manera.

Lo que tenemos que hacer es

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

Tener en una variable no funcionará en ese caso.

Otros consejos

Es necesario dividir las cuerdas, o convertir toda la instrucción SQL para SQL dinámico.

EDIT:

Dividir a cabo variables por el otro ejemplo, o hacer SQL dinámico.

Esta no es la mejor práctica , pero es simplemente para darle una idea:

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top