以下は、オンラインで見つけた例から作成したコードです。リンクが見つかりませんが、コードはこのスタック オーバーフローの質問に対する回答で参照されています。
ストアド プロシージャ内で現在作業している SQL コードは次のとおりです。これは長いプロシージャだったので、作業中のセクションだけに要約し、SSRS からパラメータとして渡されるforを追加DECLARE
しました。コード スニペットを実行します。SET
@EMPLOYEES
DECLARE @EMPLOYEES varchar(8000)
-- EMPLOYEES is a comma separated list of EMPLOYEE IDS
-- FROM SSRS Report Parameters. Each ID is 12 characters
-- And there are 806 Employees to choose from, which
-- when all are selected, the Comma separated string grows
-- to 11,193 characters, much longer than 8000
SET @EMPLOYEES = 'EMP000000001,EMP000000002,EMP000000003'
CREATE TABLE #EMPLOYEEIDS
(
EMPLOYEEID varchar(100) NOT NULL
)
DECLARE @CharIndex AS int
DECLARE @Piece AS varchar(100)
-- FILL THE #EMPLOYEEIDS TABLE WITH THE COMMA SEPARATED EMPLOYEE IDS
SELECT @CharIndex = 1
WHILE @CharIndex > 0 AND LEN(@EMPLOYEES) > 0
BEGIN
SELECT @CharIndex = CHARINDEX(',', @EMPLOYEES)
IF @CharIndex > 0
SELECT @Piece = LEFT(@EMPLOYEES, @CharIndex - 1)
ELSE
SELECT @Piece = @EMPLOYEES
INSERT INTO #EMPLOYEEIDS (EMPLOYEEID) VALUES (@Piece)
SELECT @EMPLOYEES = RIGHT(@EMPLOYEES, LEN(@EMPLOYEES) - @CharIndex)
END
SELECT * FROM #EMPLOYEEIDS
DROP TABLE #EMPLOYEEIDS
6 セットの複数値があり、すべて正常に機能しましたが、レポートに従業員のデータの多くが欠落していることがわかりVARCHAR(8000)
、レポート パラメーターですべての従業員を選択するとオーバーフローしたことがわかりました (あるそれらの800以上)。レポートが実行され、SQL は喜んVARCHAR
で 8000 文字に切り捨て、IDS の 4 分の 1 は解析されませんでした。
そのため、テキスト フィールドに切り替えようとしましVARCHAR
たが、フィールドが TEXT として設定されている場合、解析関数は機能しません。次のようなエラーが表示されます。
メッセージ 8116、レベル 16、状態 2、プロシージャ usp_QualityMonitoring_AllProfiles_SelectWithParameters、行 89
引数データ型テキストは、左側の関数の引数 1 に対して無効です。
これは理解できます。 で機能する多くの機能が では機能しVARCHAR
ないことはわかっていTEXT
ます。そのため、 を使用すると、SQL は 8000 文字以降をすべて切り捨てます。VARCHAR
に切り替えると、プロシージャは実行されませんTEXT
。
- SSRS から多数のオプションをサポートできる SQL Server ストアド プロシージャに多値パラメーターを渡すには、他にどのようなオプションが必要ですか?
TEXT
または、代わりに解析するストアド プロシージャのコードを修正する方法はありVARCHAR
ますか?
注: Stored Proc を実行している SQL Server は 2005 年のものだと最初は思っていましたが、そうではないことがわかりました。
SELECT @@VERSION
-- Microsoft SQL Server 2000 - 8.00.2039 (Intel X86) May 3 2005 23:18:38 Copyright (c) 1988-2003 Microsoft Corporation Standard Edition on Windows NT 5.2 (Build 3790: Service Pack 2)