我有一份SSRS报告,我们希望将其部署为使用主要或辅助电话号码在我们的数据库中查找公司的工具。该参数应该能够搜索主要和次要电话#列(如果可以使用2个单独的参数来完成,那也很好)。 我遇到的问题是我无法限制或控制用户可以提取的数据。他们使用AD凭据运行报告,因此我不确定如何在报告查询中应用安全性。 目前,如果我只使用空格字符运行报告,(我没有启用"允许空白值")它将返回所有具有空白主要或辅助电话号码的公司... I尝试强制电话号码参数为> = 7个字符,但仍然无法正常工作。尝试添加<> ' '但那也没有用。
报告是一个非常简单的选择陈述;
select t.name, t.id, tt.seqnum
from table t join
(select t.name, row_number() over (order by min(id)) as seqno
from table t
group by t.name
) tt
on t.name = tt.name;
尝试了上述电话号码条款的一些变体,但没有运气。
答案 0 :(得分:0)
@PhoneNumber必须与主要或辅助电话号码完全匹配才能返回公司。 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
我的猜测是,您的记录都是空白的主要电话号码有效。
答案 1 :(得分:0)
如果您尝试将WHERE子句更改为以下内容,该怎么办?
WHERE cmp_active='Y'
AND ((RTrim(LTrim(@PhoneNumber)) IS NOT NULL) AND ((cmp_primaryphone=@PhoneNumber)
or (cmp_secondaryphone=@PhoneNumber)))
答案 2 :(得分:0)
我在另一个论坛上得到了一个建议,这个问题显而易见;我没有在where子句中将我的AND OR arguemnts分开;我只是在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)
END