0

初めてSSRSのすばらしい世界を扱っています。私のニーズに合ったレポートを作成するために、レポートビルダーを使用しています。SSRSがカスタムストアドプロシージャクエリにパラメータを送信する

enter image description here

だけで正常に動作し、接続している:私は先に行って、私のデータソースを作成した白紙を作成する際に

。だから私は先に行くとデータセット作成:

enter image description here

再び私は必要なストアドプロシージャを見つけ、それに接続されています。今データセットフォルダの下で、それは次のようになります。正しい

enter image description here

...が、同時に - 正しくありません。

enter image description here

再び正しいですが、私は私のレポートページにそれを使用することはできないように見えるどの:

パラメータフォルダは次のようになります。クエリーに渡すためには、これらのすべてのパラメータが必要です(この場合は1だけ必要です、ユーザーID)。

enter image description here

だから私は、空白のレポートページ内で右クリックして、挿入を選択 - >テーブルを、ページ上のテーブルを配置します。レポートページ・テーブルにちょうどVAL1をドラッグし、それを実行しているとき - これは私が手に出力されます:

enter image description here

を本当にそれがパラメータだったときには、「クエリ出力」として、すべての1のを配置しますそのユーザーIDの戻り情報を照会するために入力します。

私のストアドプロシージャがこの(原因、それは大であることに削減)のようになります。

USE [B2017] 
GO 
/****** Object: StoredProcedure [dbo].[spFetchApproved] Script Date: 10/26/2017 2:26:09 PM ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

ALTER PROCEDURE [dbo].[spFetchPending] (
    @val1 VARCHAR(100) = null, 
    @val2 VARCHAR(100) = null, 
    @val3 VARCHAR(100) = null, 
    @val4 VARCHAR(100) = null, 
    @val5 VARCHAR(100) = null 
) 
AS 
BEGIN TRY 
    SET NOCOUNT ON; 
    DECLARE @version VARCHAR(30); 
    SET @version = OBJECT_NAME(@@PROCID); 
    /************************************/ 
    /*   The Query    */ 
    /* 1=text | 2=datetime | 3=else */ 
    /************************************/ 
    EXEC [dbo].[_chkQ] 
     'SELECT 
      BL.number, 
      BL.line, 
      tOf.name          AS type, 
      E.name           AS environment 
      [more code here....] 
     WHERE 
      LINK_userTblID = @val1 
     AND 
      stage = 2 
     GROUP BY 
      [more code here.....]', 
     @version, 
     @val1, 3 
END TRY 
BEGIN CATCH 
    /************************************/ 
    /*  Get Error results back  */ 
    /************************************/ 
    SELECT 
     ERROR_NUMBER()  AS ErrorNumber, 
     ERROR_SEVERITY() AS ErrorSeverity, 
     ERROR_STATE()  AS ErrorState, 
     ERROR_PROCEDURE() AS ErrorProcedure, 
     ERROR_LINE()  AS ErrorLine, 
     ERROR_MESSAGE()  AS ErrorMessage; 
    /************************************/ 
END CATCH 

そしてまた、そのが[DBO]に行く参照[_ chkQ](もダウントリミング):。

USE [B2017] 
GO 
/****** Object: StoredProcedure [dbo].[_chkQ] Script Date: 10/26/2017 2:57:20 PM ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

ALTER PROCEDURE [dbo].[_chkQ] (
    @ParameterSQL VARCHAR(MAX), 
    @ver VARCHAR(30), 
    @val1 VARCHAR(MAX) = null, 
     @val1Type int = null, 
    @val2 VARCHAR(MAX) = null, 
     @val2Type int = null, 
    [more code here...] 
) 
AS 
    DECLARE @SQL NVARCHAR(MAX); 
    DECLARE @IDENTITY INT; 

    BEGIN 
     IF (@val1 IS NOT NULL) 
      BEGIN 

       IF (@val1Type = 1) 
        SET @ParameterSQL = replace(@ParameterSQL, '@val1', '''' + @val1 + ''''); 
       ELSE IF (@val1Type = 2) 
        SET @ParameterSQL = replace(@ParameterSQL, '@val1', '''' + @val1 + ''''); 
       ELSE 
        SET @ParameterSQL = replace(@ParameterSQL, '@val1', @val1); 
      END 
     IF (@val2 IS NOT NULL) 
      [more code here...] 
    END 

    print @ParameterSQL 

    IF CHARINDEX('INSERT ', @ParameterSQL) > 0 
     BEGIN 
      SET @SQL = @ParameterSQL; 
      EXECUTE sp_executesql @SQL; 
      SET @IDENTITY = (SELECT @@IDENTITY AS Returned); 
     END 
    ELSE IF CHARINDEX('DELETE ', @ParameterSQL) > 0 
     [more code here...] 

    PRINT @SQL; 

    DECLARE @ExitSQL NVARCHAR(MAX); 
    SET @ExitSQL = 
     'SELECT 
     CONCAT(
       OBJECT_NAME(@@PROCID), 
       '' '', 
       LEFT(modify_date, 11), 
       '' ('', 
       DATEDIFF(day, LEFT(modify_date, 11), GETDATE()), 
       '' days ago)'' 
      ) AS CurrentVersion, 
     CONCAT(' + CHAR(39) + 
         REPLACE(
          REPLACE(
           REPLACE(
            REPLACE(
             REPLACE(@SQL, CHAR(13), ''), 
            CHAR(10), ''), 
           '  ', ''), 
          '  ', ''), 
         '''', '''''') + 
        CHAR(39) + 
     ', '''') AS theQuery 
     FROM 
     sys.objects 
     WHERE 
     type = ''P'' 
     AND 
     name = ''' + @ver + ''''; 

    EXECUTE sp_executesql @ExitSQL 

私のASP.netページでは、通常、ストアドプロシージャと呼ばれ、SPに必要な値を送信します。しかし、私はそれを行うためにここでそのオプションを持っているようには思われません?

私は必要なようにレポートを作成することができます(デザインは賢明です)また、ASP.netページから呼び出すことができます(つまり、この場合はユーザーIDとして1を、レポートのクエリ出力を収集するストアドプロシージャに?)

+0

ReportViewerコントロール –

+0

を使用します。申し訳ありませんが、ASP.net MVC @WEI_DBAを配置することを意味します。そしてBTWは**私は設計**で**レポートを構築するのに役立つことはありません。 – StealthRT

+0

これがあなたが探しているものかどうか確認してください。 https://code.msdn.microsoft.com/How-to-Display-SSRS-report-e3f6be05 –

答えて

0

パラメータプロパティに 'allow null'を設定し、オプションで1つのパラメータを除くすべてのパラメータのデフォルトをnullに設定します。

ところで:パラメータ名を変更することをお勧めします。

関連する問題