1

SSRS を使用してテーブルを更新しています。レポートを実行する前に、ユーザーがヘッダーから選択する一連のパラメーターがあります。レポートは、ストアド プロシージャを実行してテーブルを更新した後に実行されます。私の問題は、すべてではありませんが、場合によっては書き込みが行われるが、レポートに結果が表示されないことです。テーブルを確認でき、情報が正しく更新されています。

私が知りたいのは、ストアド プロシージャへの書き込み後までレポートを遅らせる方法があるかどうかです。

呼び出されるストアド プロシージャは次のとおりです。

USE [InvoiceSHC]
GO
/****** Object:  StoredProcedure [dbo].[MasterDataUpdate]    Script Date: 01/25/2013 14:07:58 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      Tim Vavra
-- Create date: 1/15/2013
-- Description: This procedure is designed to update the table MasterData 
-- with information entered into SSRS report by Production Assistants.
-- this information will be used to create the invoice for SHC and provide metric 
-- information.
-- =============================================
ALTER PROCEDURE [dbo].[MasterDataUpdate]
    -- Add the parameters for the stored procedure here

    @Ref float,
    @Phase nvarchar(255),
    @Page nvarchar(255),
    @PageType nvarchar(255),
    @Percent int,
    @ChangeType nvarchar(255),
    @UserName varchar(MAX)
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    Insert into MasterData 
    (Ad,Page,[Page Type],[Percent],Phase,[Change Type],LstChng, [UID])

    values( @Ref, @Page, @PageType, @Percent, @Phase, @ChangeType, GETDATE(), @UserName)

end

    update MasterData
    set [Base Page] =
        Case 
            When [Page] like '[1-99]' then [Page]
            When [Page] like '%[A-Z]' then left([Page],1)+((ASCII(convert(varchar,(RIGHT([Page],1))))-64)*.01)
            When[Page] like '%-%' then LEFT([Page],1)+(cast(RIGHT([page],2)as int)*.01)+.26

end         

    update MasterData 
    set [Alt Type] =
        Case
            When [Page] like '[1-99]' then 'B'
            When [Page] like '%[A-Z]' then 'A'
            When[Page] like '%-%' then 'T'


END

レポートで使用するデータセットのクエリは次のとおりです。

SELECT     MasterData.Ad, MasterData.Page, MasterData.[Page Type], MasterData.[Percent], MasterData.Phase, MasterData.[Change Type], MasterData.LstChng, 
                  PageCost.Amt AS PageCost, VersionCost.Amt AS VersionCost
FROM         MasterData INNER JOIN
                      PageCost ON MasterData.[Page Type] = PageCost.PageType INNER JOIN
                      VersionCost ON MasterData.[Change Type] = VersionCost.ChangeType
WHERE     (MasterData.Ad = @Ref) AND (MasterData.Phase = @Phase) AND (MasterData.Page = @Page)

これが誰かが解決策を提供するのに役立つ十分な情報であることを願っています.

4

2 に答える 2

0

ref_cursorプロシージャの実行後にMasterDataテーブルを返す関数を作成することをお勧めします。私の作品には、歴史的価値を捉えるためにこれらの多くが含まれています。

于 2013-01-27T23:08:34.100 に答える
0

私の答えが機能するには、レポートをホストする正当な SSRS サーバーがあり、Web サービスの機能にアクセスできるようにする必要があります。

データ ドリブン サブスクリプションは、基準に基づいた形式でレポートを送信できます。コードを更新するジョブを設定したり、最後に成功した実行のデータをデータベース テーブルに保存したり、その出力をクエリしてレポートを生成したりできます。これに関するMSDNの記事は次のとおりです。

より単純なアプローチは、両方が静的な時間に設定されている場合、夜間のジョブの後に発生する毎日の増分で標準サブスクリプションをセットアップすることです。

正直なところ、両方のアプローチがうまくいくかもしれませんが、最初のアプローチはセットアップに時間がかかりますが、より柔軟になります. 2 番目のアプローチは、より根深いものですが、セットアップと保守がはるかに簡単です。

于 2013-01-25T21:57:05.163 に答える