1

我有一个 SQL Server 存储过程,我想用它在我的应用程序 (c#) 中创建报告。

因为过程中的表格是动态创建的,所以我无法使用它来创建报告。

如何使用此过程在我的应用程序中创建报告?

我正在使用 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 回答