我有一个需要传递字符串才能进行IN的情况
declare @searchString varchar(50) set @searchString = ' ''Nestle'',''UFI'' ' select * from tbl1 where CompanyName IN (@SearchString)
不起作用。
但是,如果我这样做:
select * from tbl1 where CompanyName IN ('Nestle','UFI')
它工作正常。我不明白为什么一个工作而另一个不工作
使用IN它时,它查看的是集合,而不是单个字符串表达式。因此,您需要实现一个函数,例如CsvToInt返回表,如下所示:
IN
CsvToInt
CREATE Function [dbo].[CsvToInt] ( @Array varchar(1000)) returns @IntTable table (IntValue int) --Parse comma seperated value parameters --To be used in SELECT blah WHERE blah IN (...) --This function returns int, but may be modified to return any datatype AS begin declare @separator char(1) set @separator = ',' declare @separator_position int declare @array_value varchar(1000) set @array = @array + ',' while patindex('%,%' , @array) <> 0 begin select @separator_position = patindex('%,%' , @array) select @array_value = left(@array, @separator_position - 1) Insert @IntTable Values (Cast(@array_value as int)) select @array = stuff(@array, 1, @separator_position, '') end return end
然后,您可以像这样在存储过程中使用此功能:
SELECT Blah FROM MyTable WHERE Foo IN (SELECT * FROM dbo.CsvToInt(@Parameter))
其中@Parameter包含逗号分隔的值字符串,例如:
@Parameter
Nestle, UFI, Test