0

以下は、オンラインで見つけた例から作成したコードです。リンクが見つかりませんが、コードはこのスタック オーバーフローの質問に対する回答で参照されています

ストアド プロシージャ内で現在作業している 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) 
4

0 に答える 0