我有一个Server存储过程,我想使用它在我的应用程序(c#)中创建报表。
由于过程中的表是动态创建的,所以我在使用它创建报表时遇到了困难。
如何使用此过程在应用程序中创建报表?
我使用的是VS2010,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 发布于 2012-11-19 23:59:41
我遇到了一些我认为类似的东西--试图让Linq到Sql来从存储的proc中构建一个结果集,它使用动态SQL来选择结果。我就是这样解决问题的..。这在很大程度上是一项工作,但您将无法真正获得一个向导来处理动态结果集。还请注意,如果动态sql返回不同的列,则不太可能工作。
https://stackoverflow.com/questions/13464503
复制相似问题