将多值参数传递给存储过程
问题描述:
我遇到了将多个参数传递给水晶报表存储过程的麻烦。我有一个存储过程,只要?StockNumber参数是单个值就可以正常工作。 当我尝试将其更改为多值时,会发生两件事情:是否显示一条消息:“此存储过程无法接受多个值”。或者如果尝试直接在过程中启用参数来接受多个值,它只是关闭一个应用程序而没有任何错误。 据我了解,这是存储过程的限制,而不是水晶报告。 反正我需要解决这个问题。我只是不知道如何在水晶报表环境中操作参数。请讨论。谢谢!将多值参数传递给存储过程
SELECT
"table1"."StockNum"
, "table1"."StockOnhand"
, "table1"."StockNumber"
, "table1"."StockLocation"
,"table2"."StockDesc"
,"table2"."StockDesc2"
, "TotalSoldItems"."SoldItems"
FROM
"AAG1"."DB2"."table1" "table1"
LEFT JOIN
(
SELECT
SUM ("StockNumAA"."StockNumQuantity") "SoldItems"
, "StockNumAA"."from"
FROM
"AAG1"."DB2"."StockNumAA" "StockNumAA"
WHERE "StockNumAA"."code"='BB'
AND "StockNumAA"."StockNumber" = '{?3PartNumber}'
AND ("StockNumAA"."date">={?1StartDate}
AND "StockNumAA"."date"<={?2EndDate})
GROUP BY
"StockNumAA"."from"
) "TotalSoldItems"
ON "table1"."StockLocation" = "TotalSoldItems"."from"
LEFT JOIN
"AAG1"."DB2"."table2" "table2"
ON "table1"."StockNumber" = "table2"."Stocknumber"
WHERE "table1"."StockNumber" = '{?Stocknumber}'
答
我没有晶体报告专家,但通常试图多值传递给在SQL存储过程中被接受的方法是将它通过像这样
item1, item 2, item 3
然后逗号分隔的字符串时你只需编写一个可以用逗号分隔它们并返回一个集合的函数。
编辑:再一次,我对晶体报告一无所知,但我做了一些研究,并找到了另一个论坛的摘录。它讨论了如何使用多indentifier作为一个逗号分隔的字符串:
如果多值参数是 字符串类型,你可以把这个处于平坦 参数的 公式定义
{flattened_parameter}:
Join({?YourMultiValueParameter},",")
e.g. {?YourMultiValueParameter}[1] = US
{?YourMultiValueParameter}[2] = Canada
{?YourMultiValueParameter}[3] = UK
=> {flattened_parameter} = US, Canada, UK
是的,这就是我所说的。我不知道如何从水晶报告中的参数创建这样一个字符串。 – user194076 2011-03-10 00:38:22
@ user194076希望我发布在我的编辑中的代码能够满足您的需求。 – 2011-03-10 02:52:29