| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1391 人关注过本帖
标题:请帮个忙!这个触发器实现了一个什么功能
只看楼主 加入收藏
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
快速回复:请帮个忙!这个触发器实现了一个什么功能
数据加载中...
 
   



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

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