0

新しいSSRS 2008レポートでは、作業中のプロジェクトの要件であるため、インラインSQLを保存済み プロシージャに変更します。 SQLはSSRS 2008レポート内で正常に動作しますが、ストアドプロシージャに問題があります。SSRS 2008レポートがストアドプロシージャを使用していません

表示されるエラーメッセージは以下の通りである:

クエリ実行メッセージ8114のデータセットのために失敗し、レベル16、状態1手順SPREC、intにデータ型VARCHAR変換 ライン0エラー。

ストアドプロシージャは、レポートを1つだけ選択すると機能します。しかし、上記のエラーが発生した2つ以上のレポートを選択した場合

SSRS 2008レポートには、メインのtablix内に18個の埋め込まれたtablixがあります。 SSRSメインタブリックス内にタブックスが埋め込まれていると、ユーザーが選択したレポートパラメータに基づいて選択したレポートが表示されます。埋め込みレポートは、レポート番号に基づいて表示されます。また、選択したレポートのデータをSQLから返すだけで済みます。

これは、実行中のデータが一意の実行ごとに必要以上になるために発生します。注:返されるデータはすべて同じ形式です。各データ行に、データをどのレポート番号で選択するかを示す列が表示されます。

レポートパラメータは、複数の値を許可し、データタイプ=テキストとして設定します。レポートのパラメータにデータを渡すために データセットは以下のようになります。

SELECT 'Locator' AS rptName, 1 AS rptValue 
     UNION 
    SELECT 'letter',2 
     UNION 
    SELECT 'Wallet ', 3 
    UNION 
    SELECT 'Cum Stu', 4 
    UNION 
    SELECT 'Attend', 5 
    UNION 
    SELECT 'Test',6 

SQL各セクションがどのように見えるの前に:

IF 1 in (@report) 


IF 2 in (@report) 

私は整数にレポートパラメータのプロパティを変更しようとした ています前述のif文は動作していません。

私は自分の問題を解決するために何ができるのか教えていただけますか?

+1

クエリアナライザから実行した手順だけでも問題ありませんか?私はあなたがプロシージャをどのように呼び出すのか、そしてその内部は何かを見ません... –

答えて

1

エンドユーザーが複数の値を選択できるように、ドロップダウンから値を渡しているような感じです。これが状況の場合、SSRSはこれらの値を1つの長い文字列でストアドプロシージャに送信します。ドロップダウンでチェックされる値が多いほど、文字列は長くなります。エンドユーザーが1つの値だけをチェックすると、この状況ではすべてが機能します(IN句では1つの値しか処理できません)。

2つの選択肢があります。オプション1. SSRSドロップダウンを単一の値ドロップダウンにします。

それが実行可能な選択肢ではない場合は、ここでオプション2:

あなたはVARCHAR(1000年ストアドプロシージャに(n)のようなものを@reportパラメータのデータ型を作成する必要があるとしています);すべての可能な値を持つ文字列を処理するのに十分な長さです。次に、文字列を個々の値に分割してIN句で使用できるようにする必要があります。ここに私が過去に使った分割UDFがあります。

CREATE FUNCTION [dbo].[udf_Split] 
    ( @List  varchar(8000), 
     @Delimiter varchar(5) 
    ) 
    RETURNS @TableOfValues table 
     ( RowID smallint IDENTITY(1,1), 
     [Value] varchar(100) 
    ) 
AS 
    BEGIN 

     DECLARE @LenString int 

     WHILE len(@List) > 0 
     BEGIN 

      SELECT @LenString = 
       (CASE charindex(@Delimiter, @List) 
        WHEN 0 THEN len(@List) 
        ELSE (charindex(@Delimiter, @List) -1) 
       END 
       ) 

      INSERT INTO @TableOfValues 
       SELECT substring(@List, 1, @LenString) 

      SELECT @List = 
       (CASE (len(@List) - @LenString) 
        WHEN 0 THEN '' 
        ELSE right(@List, len(@List) - @LenString - 1) 
       END 
       ) 
     END 

     RETURN 

    END 

これを済ませたら、このようにコードを変更することができます。

IF 1 IN (SELECT value FROM dbo.udf_Split(@report, ',')) 

あなたはあなたのケース内の整数で動作するように、このUDFを微調整する必要があるかもしれませんが、データ型の暗黙的な変換は問題ではないかもしれません。または、SSRSドロップダウンリストのデータ型を文字列に変更します。

関連する問題