标题:请帮个忙!这个触发器实现了一个什么功能
只看楼主
jimmy1982
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2007-1-16
 问题点数:0 回复次数:13 
请帮个忙!这个触发器实现了一个什么功能
create trigger deltrigger on employee for
delete
as
if @@rowcount=0
return
if @@rowcount>1
begin
rollback transaction
raiserror('you can only delete one information at one time',16,1)
end
return
搜索更多相关主题的帖子: 触发器 rowcount rollback one 
2007-01-17 10:45
Kendy123456
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:62
帖 子:2720
专家分:0
注 册:2007-1-3
得分:0 
楼主是英文不过关吗?
raiseerror连错误描述都给出来了 还问是实现什么功能...

这个trigger实现的功能就是 一次操作只允许删除一条记录 如果超过一条 就拒绝并报错

2007-01-17 11:02
棉花糖ONE
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:32
帖 子:2987
专家分:0
注 册:2006-7-13
得分:0 
create trigger deltrigger on employee for
delete
as
if @@rowcount=0
return
if @@rowcount>1
begin
rollback transaction
raiserror('you can only delete one information at one time',16,1)
end
return

这个是比较好的触发器写法(英文书上说),楼主去查一下@@rowcount的帮助就能看懂了.不会的就去查帮助,帮助的解释比较清楚

26403021 sql群 博客 blog./user15/81152/index.shtml
2007-01-17 11:28
jimmy1982
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2007-1-16
得分:0 

raiserror 拼写是对的,我删除三条记录,他也能成功

2007-01-17 11:29
棉花糖ONE
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:32
帖 子:2987
专家分:0
注 册:2006-7-13
得分:0 
对啊,删除三条当然能成功啦,
if @@rowcount=0
return
这一句才是这个触发器的优秀所在

26403021 sql群 博客 blog./user15/81152/index.shtml
2007-01-17 11:31
jimmy1982
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2007-1-16
得分:0 

什么时候会弹出raiserror('you can only delete one information at one time',16,1)的提示信息,if @@rowcount=0
return不理解,
if @@rowcount>1
begin
rollback transaction
raiserror('you can only delete one information at one time',16,1)
end
是说删除的行数大于一行的话就执行begin----end 中的语句麻?还是另有意思?

2007-01-17 11:50
棉花糖ONE
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:32
帖 子:2987
专家分:0
注 册:2006-7-13
得分:0 

删除的数多于一条的话就不能让它删除.删除数多于一条就会有警告,这个触发器就是控制只能删除一条的
if @@rowcount=0
return
没有记录被删除就退出触发器.避免它在触发器中逗留的时间过长


26403021 sql群 博客 blog./user15/81152/index.shtml
2007-01-17 11:54
jimmy1982
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2007-1-16
得分:0 

我一次删除三条它都不告警呀!

2007-01-17 11:57
棉花糖ONE
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:32
帖 子:2987
专家分:0
注 册:2006-7-13
得分:0 

drop trigger deltrigger
go
create trigger deltrigger on tb after
delete
as
if @@rowcount=0
return
if ( select count(*) from deleted )>1
begin
rollback transaction
raiserror('you can only delete one information at one time',16,1)
end
改成这个吧,不知道你那个为什么不行


create trigger deltrigger on tb after
delete
as
declare @count int
set @count=@@rowcount
if @@rowcount=0
return
if @count>1
begin
rollback transaction
raiserror('you can only delete one information at one time',16,1)
end

这样也行.可能是@@rowcount的使用有限制吧,具体的我也不清楚


26403021 sql群 博客 blog./user15/81152/index.shtml
2007-01-17 12:18
jimmy1982
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2007-1-16
得分:0 
drop trigger upord
go
create trigger upord on orders
after update
as
declare @row int
set @row = @@rowcount
if @row = 0
return
if (update(p_name))
begin
if @row > 1
begin
rollback transaction
raiserror('you can only one information at one time',16,1)
end
return
update p set p.p_name = i.p_name from product p,inserted i,deleted d where p.p_name = d.p_name
end

我想要实现修改orders的p_name时,product的p_name也更新了,我这样写问题在那里?
2007-01-17 14:15



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-116461-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.316367 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved