我在网上找到了一个 UDF,它拆分了一个逗号分隔的字符串,目的是从 SSRS 向它传递一个多值参数。UDF 采用 1 个参数,即数据类型 VARCHAR(MAX)。
UDF 在我测试它并发送带有单引号的字符串时效果很好,例如'001,002,003',但据我了解,SSRS 传递的是没有单引号的 001,002,003。当这被传递给 UDF 时,我得到了传递了太多参数的错误。我在 SQL Server Management Studio 和 SSRS 的测试中都得到了这个结果。
我试图弄清楚如何在将参数发送到 SSRS 中的 UDF 之前添加单引号。我已经尝试调用 UDF 并在 DECLARE 语句中设置传递给 '' + @MyVar + '' 的变量以及 UDF 的参数。我还尝试使用 2 个单引号创建另一个变量并将变量连接起来,例如 @Quote + @MyVar + @Quote。到目前为止,没有任何工作。
这是我正在使用的 UDF:
`CREATE FUNCTION [dbo].[SplitQuotedString] (@String varchar(max))
RETURNS @Array TABLE (Item varchar(8000))
AS
BEGIN
DECLARE
@Pos int,
@End int,
@TextLength int,
@Item varchar(8000),
@Fragment varchar(8000),
@InQuotes bit
SET @TextLength = DataLength(@String)
IF @TextLength = 0 RETURN
SET @Pos = 1
SET @InQuotes = 0
SET @String = @String + ','
SET @Item = ''
WHILE 1 = 1 BEGIN
SET @End = CharIndex(',', @String, @Pos)
IF @End = 0 BREAK
SET @Fragment = Substring(@String, @Pos, @End - @Pos)
IF @InQuotes = 1 BEGIN
SET @InQuotes = PatIndex('%[^'']%', Reverse(@Fragment) + 'x') % 2
SET @Item = @Item + ',' + Replace(Left(@Fragment, DataLength(@Fragment) - 1 + @InQuotes), '''''', '''')
END
ELSE BEGIN
IF @Fragment LIKE '''%' BEGIN
SET @InQuotes = 1
SET @Item = Replace(Substring(@Fragment, 1 + @InQuotes, 8000), '''''', '''')
END
ELSE BEGIN
SET @Item = @Fragment
END
END
IF @InQuotes = 0 BEGIN
INSERT @Array (Item) VALUES (@Item)
SET @Item = ''
END
SET @Pos = @End + 1
END
RETURN
END
`
任何帮助,将不胜感激