【发布时间】:2016-01-15 15:52:13
【问题描述】:
我有一个问题,我认为这与具有多值参数有关。
在我的 TblActivity 中有两个字段 TblActivity.ActivityServActId 和 TblActivity.ActivityContractId 我想将它们包含在我的 WHERE 语句中。
按这些过滤是可选的。如果用户为参数@YESNOActivity 选择“是”,那么我想过滤查询以查找TblActivity.ActivityServActId 与参数@ServiceActivity 中的选项之一匹配的行。
@YESNOContract、TblActivity.ActivityContractId 和 @Contract 也是如此
我设法做到了:
WHERE
(CASE WHEN @YESNOActivity = 'Yes' THEN TblActivity.ActivityServActId ELSE 0 END)
IN (CASE WHEN @YESNOActivity = 'Yes' THEN @ServiceActivity ELSE 0 END)
AND (CASE WHEN @YESNOContract = 'Yes' THEN TblActivity.ActivityContractId ELSE 0 END)
IN (CASE WHEN @YESNOContract = 'Yes' THEN @Contract ELSE 0 END)
但是,尽管如果在参数@ServiceActivity 或@Contract 中只选择了一个值,则此代码可以正常工作,但一旦我在这些参数中选择了多个值,我就会收到错误:
Incorrect syntax near ','.
Query execution failed for dataset 'Activity'. (rsErrorExecutingCommand)
An error has occurred during report processing. (rsProcessingAborted)
谁能看到我做错了什么?如果我在 WHERE 语句中有一个 = 而不是 IN,我可以理解它,但无法弄清楚这一点。
使用 SQL Server 2008 和 SSRS 2008-r2
【问题讨论】:
-
我可以猜到,但你应该解释一下你是如何在
@ServiceActivity中存储多个参数的 -
嗨 Juan,感谢您整理我的问题 :) @ServiceActivity 是一个整数,我勾选了“允许多个值”。这是你的意思吗?
-
你说当
@ServiceActivity有一个值时工作正常。所以我们需要知道如何在一个 Integer 中存储多个值 -
我只是使用SSRS中多值参数的标准设置,即勾选“允许多个值”。据我所知,这会将它变成一个逗号分隔的列表。
-
好的,那么 Philp 已经给出了你需要的答案 :)
标签: sql-server-2008 ssrs-2008-r2