2015-07-20 70 views
0

我有一份SSRS报告,我们希望将其部署为一种工具,以使用主电话号码或辅助电话号码在我们的数据库中查找公司。该参数应该能够搜索主要和次要电话号码列(如果它可以使用2个独立的参数也可以)。 我遇到的问题是我无法限制或控制数据用户将能够拉动。他们使用AD凭据运行他们的报告,所以我不确定如何在报告查询中应用安全性。 目前,如果我只用空格字符运行报表(我没有启用“允许空白值”),它将返回所有具有空白主要或辅助电话号码的公司......我尝试强制电话号码参数要> = 7个字符,但仍然无效。试图加入<>'',但那也不起作用。如何从SSRS报告中排除参数值

该报告是一个非常简单的选择语句;

select cmp_id, cmp_name, cmp_primaryphone,cmp_secondaryphone, cmp_billto, cmp_shipper, cmp_consingee, c.cty_name, c.cty_state from company 
inner join city c on company.cmp_city=c.cty_code 
where cmp_active='Y' and [email protected] 
or [email protected] 
and len(cmp_primaryphone)>=7 
and len(cmp_secondaryphone)>=7 

尝试了上述电话号码条款的一些变化,但没有运气。

回答

0

@PhoneNumber必须与主要或次要电话号码完全匹配才能返回公司。 SQL Server计算“与空间相同” - 这可能是您在使用空间时获取所有记录的原因。

您的OR语句在WHERE子句中存在问题 - OR将整个WHERE子句分隔为一个或另一个。

select cmp_id, cmp_name, cmp_primaryphone,cmp_secondaryphone, cmp_billto, cmp_shipper, cmp_consingee, c.cty_name, c.cty_state from company 
inner join city c on company.cmp_city=c.cty_code 
where cmp_active='Y' and 
    (([email protected] and len(cmp_primaryphone)>=7) 
    OR ([email protected] and len(cmp_secondaryphone)>=7)) 

您的查询要么

where cmp_active='Y' and [email protected] 

OR

where [email protected] 
and len(cmp_primaryphone)>=7 
and len(cmp_primaryphone)>=7 

我的猜测是你的记录都是空白的主电话号码,他们是主动

+0

我介绍了我在我的WHERE子句中有一个小的错字(有cmp_primaryphone列出两次...)。我想到,我不能真正拥有参数搜索2个不同的列,所以我可以有2个不同的参数。我只需要能够排除能够搜索空间字符。我会尝试下面的莫利的建议并回报。感谢您的输入! – samalkobi

0

我在另一个论坛上得到了一个建议,问题变得很明显;我没有在where子句中分开我的AND OR争论点;我只是在WHERE子句中的参数周围添加括号,它解决了我的问题。 如果参数少于7个字符,我还添加了要显示的错误消息。这是它现在的样子:

select cmp_id, cmp_name, cmp_primaryphone,cmp_secondaryphone, 
cmp_billto, cmp_shipper, cmp_consingee, c.cty_name, c.cty_state 
from company 
join city c on company.cmp_city=c.cty_code 
where cmp_active='Y' 
and ([email protected] and LEN(cmp_primaryphone)>=7) 
or ([email protected] and LEN(cmp_secondaryphone)>=7) 

IF(LEN(@PhoneNumber)<7) 
BEGIN 
    RAISERROR('#######YOU HAVE NOT ENTERED A VALID PHONE NUMBER. 
REMOVE ANY BRACKETS,SPACES OR DASHES AND TRY AGAIN#######',16,1) 
END