0

我正在尝试触发报告运行,并检查字段 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, ',')))

触发报告在 radwindow 中弹出的我的 c# 代码是:

`string years = "2,3,4";
newWindow.NavigateUrl = "../Reporting/SingleReport.aspx?Report=AdHocSourcingReport&VendorID=" 
+ vendorId + "&VendorReport=true" + "&FiscalYearId="+years;`

目前,vendorId 字符串和 VendorReport 布尔值拉取成功,它是由逗号分隔的字符串,在运行报表时不会填充。我最初尝试发送“全选”,这就是我想要的。非常感谢任何帮助!

4

2 回答 2

1

这就是我过去处理拆分逗号分隔字符串的方式:

创建函数
    [dbo].[GetItemTable]
    (
    @Items VARCHAR(1000)
    )
回报
    @ItemTable 表
    (
    RowID INT IDENTITY(1,1) 主键,
    项目 VARCHAR(30)
    )
作为
开始

    声明 @ProcessItems VARCHAR(1000)
    声明 @CurrentItem VARCHAR(30)

    SET @ProcessItems = REPLACE(@Items, '''', '')

    IF SUBSTRING(@ProcessItems, LEN(@ProcessItems), 1) ','
        SET @ProcessItems = @ProcessItems + ','

        WHILE CHARINDEX(',', @ProcessItems) > 0
        开始

            SET @CurrentItem = LTRIM(CAST(SUBSTRING(@ProcessItems, 0, CHARINDEX(',', @ProcessItems)) AS VARCHAR(30)))

            插入
                @ItemTable
                (
                物品
                )
            价值观
                (
                @CurrentItem
                )

            SET @ProcessItems = SUBSTRING(@ProcessItems, CHARINDEX(',', @ProcessItems) + 1, LEN(@ProcessItems))

        END -- 计划时   

    返回
结尾

显然,您可以将当前项目大小更改为您碰巧需要的大小。

然后像这样使用它:

WHERE (p.FiscalYearId IN(SELECT item FROM dbo.GetItemTable(@FiscalYearID)))
于 2012-10-26T16:47:58.437 回答
0

我记得几年前做过类似的事情,并且在列表中遇到了同样的问题。

你能试试这个吗...

ALTER PROCEDURE [dbo].[...] @FiscalYearId varchar (100) = null ,
...选择...在哪里...和
(@FiscalYearID 为 NULL 或 p.FiscalYearId IN (@FiscalYearID))

此外,如果您发送“全选”字符串,您可能需要在您的过程中有一个条件来检查它并将查询更改为“从会计年度表中选择 id”

于 2012-10-26T16:39:05.357 回答