1

アプリケーション (c#) でレポートを作成するために使用したい SQL Server ストアド プロシージャがあります。

プロシージャ内のテーブルは動的に作成されるため、それを使用してレポートを作成するのに問題があります。

この手順を使用してアプリケーションでレポートを作成するにはどうすればよいですか?

VS2010、SQL Server 2008 R2 を使用しています

VS でデータセットを作成しましたが、そこからの使用方法がわかりません。レポート ウィザードは、作成したデータセットを使用できません。

どういうわけかこれを使用してビューを作成し、そこからデータセットを生成することを考えましたが、それを理解できませんでした。

誰かが私に何らかの方向性を与えるのに十分な情報を提供できたことを願っています.

PROCEDURE sp_RD_Reporting_View_ExportedData_For_Period    
(   
@StartDate date,   
@EndDate date   
)  
AS  
CREATE TABLE #tmp  
(  
    StartDate DATETIME,  
    EndDate DATETIME,  
    FomatedDate VARCHAR(20)  
)  
--Calculate the date ranges   
;WITH Nbrs ( n ) AS (  
        SELECT 0 UNION ALL  
        SELECT 1+n FROM Nbrs WHERE n < 6 )  
INSERT INTO #tmp  
SELECT  
    DATEADD(DAY,-n,@StartDate),  
    DATEADD(DAY,-n,@EndDate),  
    convert(varchar, DATEADD(DAY,-n,@EndDate), 110)  
FROM  
    Nbrs  
ORDER BY  
    -n  
--The date columns for the pivot  
DECLARE @cols VARCHAR(MAX)  
SELECT  @cols = COALESCE(@cols + ','+QUOTENAME(FomatedDate),  
                     QUOTENAME(FomatedDate))    
FROM   
    #tmp  
--Declaring some dynamic sql and executing it  
DECLARE @query NVARCHAR(4000)=  
N'SELECT  
    *  
FROM  
(  
    SELECT   ExportData.EmployeeID AS EmpID,  
            ABRAempInfo.EmpFullName AS Name,  
            ExportData.PayType AS PayType,   
            tmp.FomatedDate,   
            SUM(ExportData.Quantity) AS Hours   
    FROM ExportData   
    JOIN ABRAempInfo    
    ON ExportData.EmployeeID = ABRAempInfo.EmpID  
    JOIN #tmp AS tmp  
    ON ExportData.ChargeDate = tmp.FomatedDate  
    WHERE ChargeDate BETWEEN tmp.StartDate AND tmp.EndDate  
    GROUP BY ExportData.EmployeeID, ExportData.PayType, tmp.FomatedDate,   ABRAempInfo.EmpFullName  

) AS p  
PIVOT  
(  
    SUM(Hours)  
    FOR FomatedDate IN ('+@cols+')  
) AS pvt'  

EXECUTE(@query)  
DROP TABLE #tmp  
4

1 に答える 1

0

私は似ていると思うことに遭遇しました - Linq to Sql を取得して、動的 SQL を使用して結果を選択するストアド プロシージャから結果セットを構築しようとしています。これが私の問題の解決方法です...これは非常に回避策ですが、動的な結果セットを処理するウィザードを実際に取得することはできません。また、動的 SQL が異なる列を返す場合、動作しない可能性が高いことに注意してください。

  1. 動的ステートメントを実行し、SQL ステートメントのみを出力します (ステートメントを印刷し、実行しないでください)。
  2. #1 から取得した sql ステートメントを介して出力を返すようにストアド プロシージャを変更します。
  3. これで、標準のストアド プロシージャが作成されました。これを使用して、レポートを作成します。
  4. レポートがテストされ、正常に動作したら、ストアド プロシージャを再度変更し、動的 ​​SQL をプラグインします。
于 2012-11-19T23:59:41.353 に答える