У меня есть такая строка:
@Values VARCHAR(1000)
SET @Values = 'one, two, three'
Я хочу использовать эту строку в предложении WHERE
с оператором IN
.
Для этого я используюследующая табличная функция.
ALTER FUNCTION [dbo].[FN_RPT_CommaSeperated]
(@StringInput VARCHAR(8000),
@Delimiter NVARCHAR(1))
RETURNS @OutputTable TABLE ( [String] VARCHAR(10) )
AS
BEGIN
DECLARE @String VARCHAR(10)
WHILE LEN(@StringInput) > 0
BEGIN
SET @String = LEFT(@StringInput,
ISNULL(NULLIF(CHARINDEX(@Delimiter, @StringInput) - 1, -1),
LEN(@StringInput)))
SET @StringInput = SUBSTRING(@StringInput,
ISNULL(NULLIF(CHARINDEX(@Delimiter, @StringInput), 0),
LEN(@StringInput)) + 1, LEN(@StringInput))
INSERT INTO @OutputTable ([String])
VALUES ('''' + @String + '''')
END
RETURN
END
Эта функция возвращает значения ожидаемым образом.Но все же моя хранимая процедура не выдает данные, как ожидалось.
В хранимой процедуре я использую так:
WHERE
TD.CaseId IN (SELECT * FROM [FN_RPT_CommaSeperated] (@Values,','))
В любом случае, когда я жестко кодирую значения, подобные этим, в хранимойпроцедура, он возвращает ожидаемый результат.
WHERE
TD.CaseId IN ('one', 'two', 'three')
Есть идеи, как получить вывод с помощью функции?