SSRS - 在T-SQL查询中优化WHERE标准

时间:2013-02-04 14:46:54

标签: tsql parameters ssrs-2008 reporting-services

我正在开发一个报告,该报告应根据用户指定的参数返回结果。有3个报告参数,一个是带有“位置”的下拉列表,另外两个是要在“user_id”和用户的名字或姓氏中搜索的文本参数。这就是我目前使用的:

SELECT * 
FROM UserTable1
WHERE Location = @Location
AND (user_id LIKE '%'+@SearchUserID+'%'
AND first_name LIKE '%'+@SearchUserName+'%' 
OR last_name LIKE '%'+@SearchUserName+'%')

如果用户将@SearchUserID参数字段留空,则应返回所有user_ids(满足其他2个参数)。如果指定,它将返回user_id中具有该子字符串的user_ids。 @SearchUserName参数字段也是如此。如果留空,则应返回满足其他参数的所有用户。如果指定,则应返回在其first_name或last_name中具有该子字符串的所有用户(但仅返回满足其他参数的结果)。如果两者都留空,则应返回所有用户。

我上面的查询无效。它似乎只返回符合@SearchUserName参数的结果,但忽略了@SearchUserID参数。有没有办法来解决这个问题?我使用表达式将@SearchUserID过滤器放在tablix本身上:     =“”&参数!SearchUserID.Value& “” 但这导致了严重阻碍的表现。

1 个答案:

答案 0 :(得分:2)

试试这个。如果参数为空(空),则必须传递NULL

SELECT * 
FROM UserTable1
WHERE Location = @Location
AND (user_id LIKE '%'+@SearchUserID+'%'
       OR @SearchUserID IS NULL
    )
AND (first_name LIKE '%'+@SearchUserName+'%'
       OR last_name LIKE '%'+@SearchUserName+'%'
       OR @SearchUserName IS NULL
    )

“....但忽略@SearchUserID参数。” user_id的数据类型是什么?