我正在开发一个报告,该报告应根据用户指定的参数返回结果。有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& “” 但这导致了严重阻碍的表现。
答案 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
的数据类型是什么?