触发器问题,代码我都贴出来了

zhljsdly 2003-10-31 02:44:32
表结构:
class表
class_id class_name
1 类别一
2 类别二
3 类别三
.
.
.
admin表
admin_id admin_name admin_pass flag
1 姓名一 密码一 1,2
2 姓名二 密码二 1,2,3
3 姓名三 密码三 1,3
4
5
.
.
.
我想在删除类别表某一纪录的时候,对应的class_id在flag里的去掉。
比如我删除class_id=2后,admin变为1 -------- 1,3---------1,3
现在问题是我的class_id为flag的最后一位时就是删不掉。中间的和第一位的时候都可以删。
CREATE TRIGGER [class_admin] ON dbo.class
FOR DELETE
AS
declare @id int
select @id=class_id from deleted

delete from admin where flag=rtrim(convert(char(3),@id))

update admin set flag=replace(flag,rtrim(convert(char(3),@id))+',','')
where flag like '%'+rtrim(convert(char(3),@id))+'%'

update admin set flag=replace(flag,','+rtrim(convert(char(3),@id)),'')
where flag like '%'+rtrim(convert(char(3),@id)) and admin_level=0
...全文
86 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhljsdly 2003-11-03
  • 打赏
  • 举报
回复
谢谢,给分
zjcxc 元老 2003-11-03
  • 打赏
  • 举报
回复
--下面是数据测试

--创建数据环境
create table class(class_id int,class_name varchar(6))
insert into class
select 1,'类别一'
union all select 2,'类别二'
union all select 3,'类别三'

create table admin(admin_id int,admin_name varchar(6),admin_pass varchar(6),flag char(50))
insert into admin
select 1,'姓名一','密码一','1,2'
union all select 2,'姓名二','密码二','1,2,3'
union all select 3,'姓名三','密码三','1,3'
go

--创建删除触发器
CREATE TRIGGER [class_admin] ON dbo.class
FOR DELETE
AS
declare @id int
select @id=class_id from deleted

delete from admin where flag=rtrim(convert(char(3),@id))

update admin set flag=replace(flag,rtrim(convert(char(3),@id))+',','')
where flag like '%'+rtrim(convert(char(3),@id))+',%'

update admin set flag=replace(flag,','+rtrim(convert(char(3),@id)),'')
where flag like '%'+rtrim(convert(char(3),@id)+'%')
go

--删除测试
delete from class where class_id=1
delete from class where class_id=3
select * from admin

--删除测试环境
drop table class,admin
zjcxc 元老 2003-11-03
  • 打赏
  • 举报
回复
CREATE TRIGGER [class_admin] ON dbo.class
FOR DELETE
AS
declare @id int
select @id=class_id from deleted

delete from admin where flag=rtrim(convert(char(3),@id))

update admin set flag=replace(flag,rtrim(convert(char(3),@id))+',','')
where flag like '%'+rtrim(convert(char(3),@id))+',%'

update admin set flag=replace(flag,','+rtrim(convert(char(3),@id)),'')
where flag like '%,'+rtrim(convert(char(3),@id))
zhljsdly 2003-11-03
  • 打赏
  • 举报
回复
up一下
zhljsdly 2003-10-31
  • 打赏
  • 举报
回复
上面最后一行,本来是
CREATE TRIGGER [class_admin] ON dbo.class
FOR DELETE
AS
declare @id int
select @id=class_id from deleted

delete from admin where flag=rtrim(convert(char(3),@id))

update admin set flag=replace(flag,rtrim(convert(char(3),@id))+',','')
where flag like '%'+rtrim(convert(char(3),@id))+'%'

update admin set flag=replace(flag,','+rtrim(convert(char(3),@id)),'')
where flag like '%'+rtrim(convert(char(3),@id))

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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