我正在使用SSRS来报告和执行存储过程以为报告生成数据
DECLARE @return_value int EXEC @return_value = [dbo].[MYREPORT] @ComparePeriod = 'Daily', @OverrideCompareDate = NULL, @PortfolioId = '5,6', @OverrideStartDate = NULL, @NewPositionsOnly = NULL, @SourceID = 13 SELECT 'Return Value' = @return_value GO
在上面,当我通过时,@PortfolioId = ‘5,6’它给了我错误的输入
我需要所有记录,portfolio id 5 and 6 also这是发送 多个值的正确方法吗?
当我执行报告时,只给@PortfolioId = ‘5’它给了我120 条记录,而当我执行报告时给了@PortfolioId = ‘6’它给了我 70条记录
因此,当我给@PortfolioId =‘5,6’它的时候,应该总共只给我190条记录,但是它给了我更多的记录,我不知道我到底出了什么问题。
有人可以帮我吗?谢谢
所有代码都太大,无法粘贴,我正在粘贴相关代码,请提出提示。
CREATE PROCEDURE [dbo].[GENERATE_REPORT] ( @ComparePeriod VARCHAR(10), @OverrideCompareDate DATETIME, @PortfolioId VARCHAR(50) = '2', --this must be multiple @OverrideStartDate DATETIME = NULL, @NewPositionsOnly BIT = 0, @SourceID INT = NULL ) AS BEGIN SELECT Position.Date, Position.SecurityId, Position.Level1Industry, Position.MoodyFacilityRating, Position.SPFacilityRating, Position.CompositeFacilityRating, Position.SecurityType, Position.FacilityType, Position.Position FROM Fireball_Reporting.dbo.Reporting_DailyNAV_Pricing POSITION WITH (NOLOCK, READUNCOMMITTED) LEFT JOIN Fireball.dbo.AdditionalSecurityPrice ClosingPrice WITH (NOLOCK, READUNCOMMITTED) ON ClosingPrice.SecurityID = Position.PricingSecurityID AND ClosingPrice.Date = Position.Date AND ClosingPrice.SecurityPriceSourceID = @SourceID AND ClosingPrice.PortfolioID IN ( SELECT PARAM FROM Fireball_Reporting.dbo.ParseMultiValuedParameter(@PortfolioId, ',') )
这不容易做到。无法使NVARCHAR参数采用“多个值”。我之前所做的就是-正如您已经做过的- 使参数值像带有逗号分隔值的列表一样。然后,将该字符串拆分为存储过程中的各个部分。
NVARCHAR
拆分可以使用字符串函数完成。将每个部分添加到临时表。伪代码可能是:
CREATE TABLE #TempTable (ID INT) WHILE LEN(@PortfolioID) > 0 BEGIN IF NOT <@PortfolioID contains Comma> BEGIN INSERT INTO #TempTable VALUES CAST(@PortfolioID as INT) SET @PortfolioID = '' END ELSE BEGIN INSERT INTO #Temptable VALUES CAST(<Part until next comma> AS INT) SET @PortfolioID = <Everything after the next comma> END END
然后,将您的条件更改为
WHERE PortfolioId IN (SELECT ID FROM #TempTable)
EDIT 您可能对SSRS中多值参数的文档感兴趣,该文档 指出:
您可以为您 创建的任何报告参数定义一个多值参数。但是,如果要 使用查询将多个参数值传递回数据源,则必须 满足以下要求: 数据源必须是SQL Server,Oracle,Analysis Services,SAP BI NetWeaver或Hyperion Essbase。
您可以为您 创建的任何报告参数定义一个多值参数。但是,如果要 使用查询将多个参数值传递回数据源,则必须 满足以下要求:
数据源必须是SQL Server,Oracle,Analysis Services,SAP BI NetWeaver或Hyperion Essbase。
数据源不能是存储过程。Reporting Services不 支持将多值参数数组传递给存储过程。