| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 678 人关注过本帖
标题:求教一个触发器的问题~
取消只看楼主 加入收藏
loger
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2005-8-4
收藏
 问题点数:0 回复次数:2 
求教一个触发器的问题~

表级触发和列级触发可以同时在一个触发器里定义吗?我做了一个,能生成,但执行有问题!代码入下:请高人指点!
create trigger tr_进货单
on 进货单
for update,delete,insert
as
begin
declare @sellid varchar(8)
declare @stockid varchar(8)
select @sellid=进货订单号 from inserted
select @stockid=仓库号 from inserted
if (select 审核 from deleted)='确定'
begin
print '操作失败!'
rollback
end
if update(审核)
if (select 审核 from inserted)= '确定' and (select 审核 from deleted)= null
begin
declare cur_订货清单 scroll cursor
for
select 材料号,单价,数量 from 进货清单 WHERE 进货订单号=@sellid
open cur_订货清单
declare @MaterialID varchar(8)
declare @Materialamount int
declare @newprice money
fetch next from cur_订货清单 into @MaterialID,@newprice,@Materialamount
while @@fetch_status=0
begin
if exists(select 材料号 from 库存信息 where 材料号=@MaterialID and 仓库号=@stockid)
begin
declare @tempmount int
declare @tempprice money
select @tempmount=库存量 from 库存信息 where 材料号=@MaterialID and 仓库号=@stockid
select @tempprice=平均单价 from 库存信息 where 材料号=@MaterialID and 仓库号=@stockid
update 库存信息 set 库存量=库存量+@Materialamount,平均单价=((@tempmount*@tempprice+@newprice*@Materialamount)/(@tempmount+@Materialamount)),最新进价=@newprice where 材料号=@MaterialID and 仓库号=@stockid
end
else
begin
insert 库存信息(材料号,仓库号,最新进价,平均单价,库存量)values(@MaterialID,@stockid,@newprice,@newprice,@Materialamount)
end
fetch next from cur_订货清单 INTO @MaterialID,@newprice,@Materialamount
end

close cur_订货清单
deallocate cur_订货清单
end
end
go

搜索更多相关主题的帖子: 触发器 
2005-11-07 17:25
loger
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2005-8-4
收藏
得分:0 

执行没有报错,只是无法实现我需要的功能:
A.如果《进货单》里的“审核状态”为“确定”,该记录及该记录对应的《进货清单》里的所有信息不允许修改;
B.如果审核状态并非为“确定”,那么允许修改该记录,一旦设置“审核状态”为“确定”,则修改该记录对应的《库存信息》里的记录。
我执行之后,仅仅实现了:“审核状态”为确定的时候,无法修改该记录。
请教问题是:对应的进货清单里的约束是不是要在进货清单上定义一个触发器,判断对应的《进货单》里的“审核状态”,如果为确定则回滚,否则执行事务?
另一个问题:不能实现B功能,请问我做的判断有问题么?
代码如下:
create trigger tr_进货单
on 进货单
for update,delete,insert
as
begin
declare @sellid varchar(8)
declare @stockid varchar(8)
select @sellid=进货订单号 from inserted
-------------------------------------
select @stockid=仓库号 from inserted
if (select 审核 from deleted)='确定'
begin
rollback
end
以上为表级触发
-------------------------------------
以下为列级出发
if update(审核)
if (select 审核 from inserted)= '确定' and (select 审核 from deleted)= null
以下执行对库存的修改!
我想将这两和出发写到一个触发器中,可以么?请教~谢谢~~

2005-11-07 23:41
loger
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2005-8-4
收藏
得分:0 

Any way,Thanks a million!

2005-11-11 22:32
快速回复:求教一个触发器的问题~
数据加载中...
 
   



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

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