當您使用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
包含的值的像一個逗號分隔字符串:
Nestle, UFI, Test
'IN'運算符期望**數組的字符串** - 但是,您傳入的參數是單個字符串 - 而不是字符串數組。 –