SQL Server 2008中NOT IN()似乎失败
-
22-09-2019 - |
题
我建立一个提示标记系统(声音破旧),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
不隶属于 StackOverflow