いくつかのパラメーターを含むストアド プロシージャを使用する SSRS レポートに取り組んでいます。
私が問題を抱えているパラメーターの 1 つは、複数の項目 (GUID 値) を選択するオプションがあり、それらが 4000 以上のコンマ区切り値を超えているためです。
ストア プロシージャ: proc_GetCompanyRecord
========================================
CREATE PROCEDURE [dbo].[proc_GetCompanyRecord]
(
@Year AS VARCHAR(MAX) = NULL,
@CoreCompanyId AS VARCHAR(MAX) = NULL,
@CompanyId AS VARCHAR(MAX) = NULL,
@OwnerId VARCHAR(MAX) = NULL
)
--THE REST OF MY QUERY HERE WHICH PULLS ALL OF THE NEEDED COLUMNS
WHERE CoreCompany.CoreCompanyId in (SELECT * FROM ufnSplit (@CoreCompanyId, ','))
AND Company.CompanyId in (SELECT * FROM ufnSplit (@CompanyId, ','))
========================================
関数: [dbo].[ufnSplit]
CREATE FUNCTION [dbo].[ufnSplit]
(
@RepParam varchar(MAX),
@Delim char(1)
)
RETURNS @Values TABLE (Item UNIQUEIDENTIFIER)
AS
BEGIN
DECLARE @chrind INT
DECLARE @Piece varchar(MAX)
SELECT @chrind = 1
WHILE @chrind > 0
BEGIN
SELECT @chrind = CHARINDEX(@Delim,@RepParam)
IF @chrind > 0
SELECT @Piece = LEFT(@RepParam,@chrind - 1)
ELSE
SELECT @Piece = @RepParam
INSERT @Values(Item) VALUES(@Piece)
SELECT @RepParam = RIGHT(@RepParam,LEN(@RepParam) - @chrind)
IF LEN(@RepParam) = 0 BREAK
END
RETURN
END
@CompanyId パラメータに 4000 以上の値を指定してストアド プロシージャを実行しようとすると、正常に動作し、可能なすべてのレコードが返されます。
しかし、CRM にレポートを展開した後、レポートを実行して [レポートの表示] をクリックすると、「エラーが発生しました」というエラーが表示されます。
私はそれを診断し、4000 以上の GUID コンマ区切り値がストア プロシージャと IN ステートメントには多すぎることを発見しました。
メッセージ 8152、レベル 16、状態 10、行 7 文字列またはバイナリ データが切り捨てられます。
助けてください!