我有一个SSRS报告,我们想部署为一个工具,以查找我们的数据库中的公司使用主要或次要电话号码。该参数应该能够搜索主要和次要的phone#列(如果可以使用两个单独的参数来完成,也很好)。我遇到的问题是,我不能限制或控制用户能够拉取的数据。他们使用AD凭据运行报告,因此我不确定如何在报告查询中应用安全性。目前,如果我只使用一个空格字符运行报告(我没有启用“允许空白值”),它将返回所有主要或次要电话号码为空的公司……我尝试强制将电话号码参数设置为>= 7字符,但仍然不起作用。尝试添加<>‘’,但也不起作用。
报告是一个非常简单的select语句;
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 cmp_primaryphone=@PhoneNumber
or cmp_secondaryphone=@PhoneNumber
and len(cmp_primaryphone)>=7
and len(cmp_secondaryphone)>=7尝试了上述电话号码子句的几个变体,但没有成功。
发布于 2015-07-21 02:11:07
@PhoneNumber必须与主要或次要电话号码完全匹配才能返回Company。SQL Server的计数“与空格-”相同,这可能是您在使用空格时获得所有记录的原因。
WHERE子句中的OR语句存在问题- 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
((cmp_primaryphone=@PhoneNumber and len(cmp_primaryphone)>=7)
OR (cmp_secondaryphone=@PhoneNumber and len(cmp_secondaryphone)>=7) )您的查询是
where cmp_active='Y' and cmp_primaryphone=@PhoneNumber或
where cmp_secondaryphone=@PhoneNumber
and len(cmp_primaryphone)>=7
and len(cmp_primaryphone)>=7我猜你的记录都是空白的主要电话号码,它们是Active。
发布于 2015-07-21 04:12:22
如果您尝试将WHERE子句更改为以下内容,该怎么办?
WHERE cmp_active='Y'
AND ((RTrim(LTrim(@PhoneNumber)) IS NOT NULL) AND ((cmp_primaryphone=@PhoneNumber)
or (cmp_secondaryphone=@PhoneNumber)))发布于 2015-07-21 21:12:09
我在另一个论坛上得到了一个建议,这个问题变得很明显;我没有在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 (cmp_primaryphone=@PhoneNumber and LEN(cmp_primaryphone)>=7)
or (cmp_secondaryphone=@PhoneNumber 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)
ENDhttps://stackoverflow.com/questions/31517576
复制相似问题