0

如果我们传递从“Canada,Portugal”转换为“Canada”、“Portugal”的值在子句中,如果在子句“Canada”、“Portugal”中传递硬编码值,则 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)
4

1 回答 1

0

因为,最后你的where子句看起来像:

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

caluse中的这个字符串where应该是两个单独的字符串,但它只是一个!它应该如下所示:

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

所以,对于这种情况,我会使用类似的东西

where charindex([CountryName], @GeographicalLocation) > 0

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

于 2018-03-31T11:51:56.277 回答