一个略有特殊的Update的语句.

来源:互联网 发布:数据库理论试题及答案 编辑:程序博客网 时间:2024/04/27 05:43
今天遇到这样一个更新语句:
在用户表Sys_emplyee中有一字段Statisticsreports,类型为:varchar(200),这个字段用来记录此用户可以查看的报表的ID, 其中ID是用单引号引起来的,多个ID之间使用逗号分开.
例如:
select EmpName,Statisticsreports from  Sys_emplyee
where  EmpAccount='newsight/zhangzs8896'

--返回:
 EmpName      Statisticsreports
 组长                '1','2','3'

现在想取消该用户对某一报表的访问权限,使用以下Sql语句
方法一:
declare @p varchar(20)
set @p='''2'''
update Sys_emplyee
set Statisticsreports=stuff(replace(','+Statisticsreports,','+@p,''),1,1,'')
where empaccount='newsight/zhangzs8896'

更新后返回记录:
 EmpName      Statisticsreports
 组长                '1','3'

方法二:
declare @p varchar(20)
set @p='''2'''
    update Sys_emplyee 
set Statisticsreports = case when (Statisticsreports like @p+'%'
                                 
then replace(Statisticsreports,@p+',','')
                             
when (Statisticsreports like '%'+@p
                                 
then replace(Statisticsreports,','+@p,'')
                             
else replace(Statisticsreports,','+@p+',',','
                        
end
where empaccount='newsight/zhangzs8896'


文章来源于 http://www.cnblogs.com/zhangzs8896 版权归原作者所有