2012-04-02 72 views
4

我有一個參數@Department和數據集其值設置爲=Join(Parameters!Department.Value,",")。我將它設置爲接受多個值,並在我的SQL中,我有以下子句:(RTRIM(G.DeptName) IN (@Department))多值參數不工作

它的工作原理,只要用戶選擇一個部門,但每次都被選中多個部門不起作用。它運行,但不顯示任何數據。例如,如果我選擇「會計」,它會顯示「會計」信息。但如果我選擇「會計」和「營銷」,則什麼都不會顯示出來。

爲什麼這是行不通的任何想法?另外,是否有可能以這種方式使用「字符串」值以外的其他方式來執行此操作?

+0

你能發佈您的查詢嗎? – Teja 2012-04-02 15:55:44

+0

爲什麼在數據集中使用Join? SSRS中的多值參數應該「正常工作」:http://msdn.microsoft.com/en-us/library/aa337292(v=sql.100).aspx – 2012-04-02 17:05:07

回答

3

您正在做出錯誤的假設。

IN ('1,2,3,4')IN (1,2,3,4)IN ('1', '2', '3', '4')

截然不同目前你正在做什麼它的第一個。您正在檢查你的部門名稱是否在列表裏面只有一個值長; @department字符串。該值中包含逗號,但它仍然是單個字符串,因此它仍然是列表中的單個項目。

您有兩種選擇。

動態地構建了SQL,使您的列表是SQL的一部分,而不是一個字符串參數。

或查找上線提供的許多功能SPLIT()之一。這是我推薦的。然後,您可以這樣做......

WHERE 
    RTRIM(G.DeptName) IN (SELECT * FROM dbo.split(@Department)) 

甚至更​​好,加入對SPLIT()函數的結果...

yourTable AS G 
INNER JOIN 
    dbo.split(@department) AS department 
    ON RTRIM(G.DeptName) = department.item 
+2

只需額外注意:如果您有'G .DeptName',將其封裝在諸如'RTRIM()'之類的函數中將意味着您不能使用該索引來查找相關記錄。相反,你會得到一個掃描,使索引旁邊毫無意義。如果可能的話,存儲預先修剪過的值,這樣你就不需要'RTRIM()',這意味着你可以使用你的索引,並縮短你的代碼:) – MatBailie 2012-04-02 16:41:23