我建立一个提示标记系统(声音破旧),I在一个字符串传递给分贝,并且如果存在匹配它发回该标记。我想停止重复的标签,因此,如果一个标签是WEB,我只希望它返回一次。所以,如果我有WEB作为标签,然后添加周刊打字“WE”不弹出WEB第二次作为建议。

但是,似乎不工作。我发送当前的标签和使用NOT IN(),以消除任何重复。下面是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

这就是获得通过的:

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

该查询的响应是vTagName =网页。显然,这是不应该的vTagName LIKE正确的结果“我们” NOT IN“网站,等等..” ..

提前感谢!

有帮助吗?

解决方案

中的语句不起作用这样的。

你将要做的就是

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

具有它在一个变量将在该情况下不工作。

其他提示

您需要拆分出来的字符串或整个SQL语句转换为动态SQL。

编辑:

分割出每另一示例性变量或执行动态SQL。

这是不是最好的做法,但仅仅是为了给你一个想法:

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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top