SSRS から複数値のパラメーターを渡す目的でコンマ区切りの文字列を分割する UDF をオンラインで見つけました。UDF は、データ型 VARCHAR(MAX) の引数を 1 つ取ります。
UDF は、テストして '001,002,003' などの単一引用符を含む文字列を送信するとうまく機能しますが、SSRS は単一引用符なしで 001,002,003 を渡していると理解しています。これが UDF に渡されると、渡された引数が多すぎるというエラーが表示されます。これは、SQL Server Management Studio と SSRS でのテストの両方で得られます。
SSRS でパラメーターを UDF に送信する前に、一重引用符を追加する方法を見つけようとしています。UDF を呼び出して、UDF の引数だけでなく、DECLARE ステートメントで '' + @MyVar + '' に渡される変数を設定しようとしました。また、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
`
どんな助けでもいただければ幸いです