选择“查询”未在“子句”中使用

时间:2018-03-31 11:10:04

标签: sql-server no-response

如果我们传递从“加拿大,葡萄牙”转换为“加拿大”,“葡萄牙”的值In子句,则SQL查询无效  如果传递硬编码值在“加拿大”一词中,“葡萄牙”就可以了。

  declare @GeographicalLocation varchar(max) 
        set @GeographicalLocation ='Canada,Portugal'
        set @GeographicalLocation  = REPLACE(@GeographicalLocation, ',', ''',''')
        set @GeographicalLocation = ''''+@GeographicalLocation+'''';
select ContinentName from [ContinentList] where ContinentId in 
    (select ContinentId from [CountryList] where [CountryName] 
     in(@GeographicalLocation)and BaseId is Null)

1 个答案:

答案 0 :(得分:0)

因为,最后你的where子句如下:

where [CountryName] in ('''Canada'',''Portugal''')

where caluse中的这个字符串应该是两个单独的字符串,但它只有一个!它应该是这样的:

where [CountryName] in ('Canada','Portugal')

所以,对于这种情况,我会使用像

这样的东西
where charindex([CountryName], @GeographicalLocation) > 0

在这种方法中,您不需要在字符串变量中添加额外的'。 我建议使用区分大小写的排序规则。