【发布时间】:2019-04-16 03:14:26
【问题描述】:
我有一个这样的字符串:
@Values VARCHAR(1000)
SET @Values = 'one, two, three'
我想在带有IN 运算符的WHERE 子句中使用此字符串。
为此,我正在使用下表值函数。
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')
任何想法如何使用该函数获取输出?
【问题讨论】:
标签: sql sql-server tsql stored-procedures sql-function