一个存储过程实现的效果如何用一句sql语句实现

sql_help 2010-05-19 02:59:13

create proc [dbo].[sp_filter_customer]
(
@UserName nvarchar(256)
)
as
begin

if exists(select 1 from AccessRule where name=@UserName)
select id,name from view_customer
where customer_category
in
(
select category from Custom_DataFilter
where username=@UserName
)

else
select id,name from view_customer
end


存储过程的方式如下,主要就是先判断AccessRule中有没有该用户的数据,如果有使用数据过滤,没有就读取所有的数据?
现在如果要用一句sql语句来判断该如何实现?
谢谢
...全文
99 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
chuifengde 2010-05-19
  • 打赏
  • 举报
回复
SELECT distinct A.id,A.NAME FROM view_cusomer A  INNER JOIN (SELECT * FROM Custom_DataFilter WHERE username=@Username) B
ON A.customer_category=case WHEN exists(select 1 from AccessRule where name=@UserName) THEN
B.category ELSE A.customer_category END
永生天地 2010-05-19
  • 打赏
  • 举报
回复
select id,name from view_customer where (customer_category
in
(
select category from Custom_DataFilter
where username=@UserName
) and exists(select 1 from AccessRule where name=@UserName))
or not exists(select 1 from AccessRule where name=@UserName)
dawugui 2010-05-19
  • 打赏
  • 举报
回复
或者你改为如下再试试:

select id,name from view_customer where customer_category in (select category from Custom_DataFilter where username=@UserName)
union all
select id,name from view_customer where customer_category not in (select category from Custom_DataFilter where username=@UserName)
FlySQL 2010-05-19
  • 打赏
  • 举报
回复
一句足矣

select id,name from view_customer
where username=isnull(@UserName,username)
dawugui 2010-05-19
  • 打赏
  • 举报
回复
你这个存在判断的话,就是你那么用.一条SQL实现不了.

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧