【发布时间】:2020-12-14 13:04:17
【问题描述】:
我有一个从存储过程运行的 SQL Server Reporting Services 报表。我想将报告中的参数发送到要过滤的存储过程。参数应该是一个 int 数组。请告知这是如何完成的?你如何发送一个 Int 数组?到目前为止的存储过程:
ALTER PROCEDURE [dbo].[CostDriverIdentification]
@ProductiveUnitID Int
AS
BEGIN
SET NOCOUNT ON;
DECLARE @CountPUIDs int
SET @CountPUIDs = COUNT(@ProductiveUnitID)
SELECT @CountPUIDs
SELECT
dbo.View_ProdUnit.ProdUnitID, dbo.View_ProdUnit.ProdUnitNo,
dbo.View_ProdUnit.PU_Text, dbo.View_ProdUnit.PUGroup,
dbo.View_ProdUnit.CompanyID, dbo.View_ProdUnit.UserGroupID,
dbo.View_PivotWOCCCost.ComponentCodeID,
dbo.ComponentCode.C_Code + ' - ' + dbo.ComponentCode.CC_Text AS ComponentCode,
dbo.View_PivotWOCCCost.ActivityTypeID AS WO_AT,
dbo.ActivityType.ATCode, dbo.View_PivotWOCCCost.ForecastItemID,
dbo.View_FCI_LCM.FCI_text, dbo.Package.PackageNo,
dbo.View_PivotWOCCCost.CountOfWONumber,
ROUND(dbo.View_PivotWOCCCost.AvgWOCost, 2) AS AvgWOCost,
ROUND(dbo.View_PivotWOCCCost.TotSpend, 2) AS TotSpend,
dbo.View_FCI_LCM.LCMName, dbo.View_FCI_LCM.LCMItemID,
dbo.View_FCI_LCM.First, dbo.View_FCI_LCM.Frequency,
dbo.View_FCI_LCM.PartsCost, dbo.View_FCI_LCM.LabourCost,
dbo.View_FCI_LCM.MiscCost, dbo.View_FCI_LCM.TotalCost,
dbo.View_ProdUnit.ProdUnitLifeLeft, dbo.View_ProdUnit.ProdUnitLifeUsed,
dbo.View_ProdUnit.ProdUnitLifeUsed / dbo.View_PivotWOCCCost.CountOfWONumber AS ActualFrequency,
ROUND(dbo.View_FCI_LCM.ItemRate, 2) AS LCMItemRate,
ROUND(dbo.View_PivotWOCCCost.TotSpend / dbo.View_ProdUnit.ProdUnitLifeUsed, 2) AS ActItemRate,
CASE
WHEN View_FCI_LCM.ItemRate IS NULL
THEN ROUND(View_PivotWOCCCost.TotSpend / View_ProdUnit.ProdUnitLifeUsed, 2)
ELSE Round(Abs(View_FCI_LCM.ItemRate - View_PivotWOCCCost.TotSpend / View_ProdUnit.ProdUnitLifeUsed), 2)
END AS RateVar,
ParentCC.C_Code AS CompCodeCostGroup,
ParentCC.CC_Text AS CompCodeCostGroup_Text,
(dbo.View_ProdUnit.ProdUnitLifeUsed / dbo.View_PivotWOCCCost.CountOfWONumber ) / @CountPUIDs as AverageFreq
FROM
dbo.Package
INNER JOIN
dbo.View_PivotWOCCCost ON dbo.Package.ID = dbo.View_PivotWOCCCost.PackageID
INNER JOIN
dbo.View_ProdUnit ON dbo.View_PivotWOCCCost.ProductiveUnitID = dbo.View_ProdUnit.ProdUnitID
INNER JOIN
dbo.ComponentCode ON dbo.View_PivotWOCCCost.ComponentCodeID = dbo.ComponentCode.ID
INNER JOIN
dbo.ActivityType ON dbo.View_PivotWOCCCost.ActivityTypeID = dbo.ActivityType.ATID
LEFT OUTER JOIN
dbo.ComponentCode AS ParentCC ON dbo.ComponentCode.CC_CostGroupID = ParentCC.ID
LEFT OUTER JOIN
dbo.View_FCI_LCM ON dbo.View_PivotWOCCCost.ForecastItemID = dbo.View_FCI_LCM.FCI_ID
WHERE
(dbo.View_ProdUnit.ProdUnitLifeUsed <> '0')
AND dbo.View_ProdUnit.ProdUnitID = @ProductiveUnitID
END
从查询中调用存储过程是可行的,但是发送数组是个问题:
DECLARE @ProductiveUnitID int
SET @ProductiveUnitID = (44)
EXEC [dbo].[CostDriverIdentification] @ProductiveUnitID
【问题讨论】:
标签: sql-server stored-procedures reporting-services