首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用包含动态SQL的存储过程在C#中创建报表(报表查看器)

问使用包含动态SQL的存储过程在C#中创建报表(报表查看器)
EN

Stack Overflow用户
提问于 2012-11-19 23:51:09
回答 1查看 2.6K关注 0票数 1

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

由于过程中的表是动态创建的,所以我在使用它创建报表时遇到了困难。

如何使用此过程在应用程序中创建报表?

我使用的是VS2010,Server 2008 R2

我在VS中创建了一个数据集,但不确定如何从那里使用它。报表向导无法使用我创建的数据集。

我考虑过用它来创建视图,然后从视图中生成一个数据集,但我找不出答案。

我希望我已经提供了足够的信息,让人给我一些指导。

代码语言:javascript
复制
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  
EN

回答 1

Stack Overflow用户

发布于 2012-11-19 23:59:41

我遇到了一些我认为类似的东西--试图让Linq到Sql来从存储的proc中构建一个结果集,它使用动态SQL来选择结果。我就是这样解决问题的..。这在很大程度上是一项工作,但您将无法真正获得一个向导来处理动态结果集。还请注意,如果动态sql返回不同的列,则不太可能工作。

  1. 运行动态语句并只输出SQL语句(打印语句,不要执行)
  2. 修改存储过程以通过从#1获得的sql语句返回输出
  3. 现在您有了一个标准的存储过程--使用它来生成报表。
  4. 在测试报告并正常工作后,再次修改存储过程并插入动态sql。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13464503

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档