【问题标题】:SSRS - Refine WHERE Criteria in T-SQL QuerySSRS - 优化 T-SQL 查询中的 WHERE 条件
【发布时间】:2013-02-04 22:53:44
【问题描述】:

我正在开发一份报告,该报告应根据用户指定的参数返回结果。有 3 个报告参数,一个是带有“Locations”的下拉列表,另外两个是要在“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 & "" 但这导致性能严重受阻..

【问题讨论】:

    标签: tsql parameters ssrs-2008 reporting-services


    【解决方案1】:

    试试这个。如果参数为空白(空),则必须传递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的数据类型是什么?

    【讨论】:

    • 谢谢哈姆雷特,效果很好。这些字段是 varchars。
    猜你喜欢
    • 1970-01-01
    • 2014-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多