如果我们传递从“加拿大,葡萄牙”转换为“加拿大”,“葡萄牙”的值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)
答案 0 :(得分:0)
因为,最后你的where
子句如下:
where [CountryName] in ('''Canada'',''Portugal''')
where
caluse中的这个字符串应该是两个单独的字符串,但它只有一个!它应该是这样的:
where [CountryName] in ('Canada','Portugal')
所以,对于这种情况,我会使用像
这样的东西where charindex([CountryName], @GeographicalLocation) > 0
在这种方法中,您不需要在字符串变量中添加额外的'
。
我建议使用区分大小写的排序规则。