我正在尝试触发运行报告,并选中“select all”字段FiscalYearId,这是一种字符串类型。我可以成功传递一个字符串,如“2”,报告将找到它。但是,当我尝试传递“全部选择”或“2,3,4”时,多重检查字段不会对此进行检测。
以下是报告中存储过程的一部分:
ALTER PROCEDURE [dbo].[...]
@FiscalYearId varchar (100) = null ,
...
select ...
where ...
and (@FiscalYearID IS NULL OR p.FiscalYearId IN (SELECT * FROM SPLIT(@FiscalYearID, ',')))
我的c#代码触发报告在radwindow中弹出:
`string years = "2,3,4";
newWindow.NavigateUrl = "../Reporting/SingleReport.aspx?Report=AdHocSourcingReport&VendorID="
+ vendorId + "&VendorReport=true" + "&FiscalYearId="+years;`
目前,vendorId字符串和VendorReport布尔值成功完成,它是由逗号分隔的字符串,在运行报表时不会填充。我最初尝试发送一个“全选”,这就是我想要的......非常感谢任何帮助!!
答案 0 :(得分:1)
这就是我过去处理分割逗号分隔字符串的方式:
CREATE FUNCTION [dbo].[GetItemTable] ( @Items VARCHAR(1000) ) RETURNS @ItemTable TABLE ( RowID INT IDENTITY(1,1) PRIMARY KEY, item VARCHAR(30) ) AS BEGIN DECLARE @ProcessItems VARCHAR(1000) DECLARE @CurrentItem VARCHAR(30) SET @ProcessItems = REPLACE(@Items, '''', '') IF SUBSTRING(@ProcessItems, LEN(@ProcessItems), 1) ',' SET @ProcessItems = @ProcessItems + ',' WHILE CHARINDEX(',', @ProcessItems) > 0 BEGIN SET @CurrentItem = LTRIM(CAST(SUBSTRING(@ProcessItems, 0, CHARINDEX(',', @ProcessItems)) AS VARCHAR(30))) INSERT INTO @ItemTable ( item ) VALUES ( @CurrentItem ) SET @ProcessItems = SUBSTRING(@ProcessItems, CHARINDEX(',', @ProcessItems) + 1, LEN(@ProcessItems)) END -- While Schedule RETURN END
显然,您可以将当前项目大小更改为您需要的任何内容。
然后就这样使用它:
WHERE (p.FiscalYearId IN(SELECT item FROM dbo.GetItemTable(@FiscalYearID)))
答案 1 :(得分:0)
我记得几年前做过类似的事情并且列表中存在同样的问题。
你可以尝试一下......
ALTER PROCEDURE [dbo].[...] @FiscalYearId varchar (100) = null , ... select... where... and (@FiscalYearID IS NULL OR p.FiscalYearId IN (@FiscalYearID))
此外,如果您要发送“全选”字符串,则可能需要在程序中设置一个条件来检查并将查询更改为“从fiscalyeartable中选择ID”