Вам нужно взять параметр как строку, разделенную запятыми, в хранимую процедуру, а затем проверить внутри хранимой процедуры ", если '@ID' присутствует в списке."
Если вы используете SQL Server 2016 и выше , вы можете использовать SPLIT_STRING() function
.
Если вы используете более низкую версию SQL Server , тогда вы можете использоватьэта функция для разделения строки:
CREATE FUNCTION dbo.splitstring ( @stringToSplit VARCHAR(MAX) )
RETURNS
@returnList TABLE ([Name] [nvarchar] (500))
AS
BEGIN
DECLARE @name NVARCHAR(255)
DECLARE @pos INT
WHILE CHARINDEX(',', @stringToSplit) > 0
BEGIN
SELECT @pos = CHARINDEX(',', @stringToSplit)
SELECT @name = SUBSTRING(@stringToSplit, 1, @pos-1)
INSERT INTO @returnList
SELECT @name
SELECT @stringToSplit = SUBSTRING(@stringToSplit, @pos+1, LEN(@stringToSplit)-@pos)
END
INSERT INTO @returnList
SELECT @stringToSplit
RETURN
END
Чтобы разделить строку внутри хранимой процедуры:
IF (@ID IN (SELECT * FROM dbo.splitstring(@CommaSeparatedString))
NB! Будьте осторожны с пробелами при использовании выше *Функция 1022 *. Для значений типа '269, 270, 274' -> пробел после запятой:
IF (@ID IN (SELECT RTRIM(LTRIM([Name])) FROM dbo.splitstring(@CommaSeparatedString))