| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1465 人关注过本帖
标题:关于触发器的问题
只看楼主 加入收藏
上帝之允
Rank: 1
等 级:新手上路
帖 子:67
专家分:5
注 册:2010-10-11
收藏
得分:0 
我现在修改后的触发器,基本可以完成所需的功能,可是唯一的问题是在我第一次输入到药库数据的时候,如果是同时输入的话,触发器就无法分辨我想要的药品,例如进货感冒冲剂300盒,那么所有的药品将都增加300,不知道为什么??
  还有一个问题就是我现在的触发器功能可不可以用其他语句代替,我听说触发器很耗系统的,所以想要问问有没有其他方法?谢谢各位了!!!!
2010-10-13 12:34
png
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:126
专家分:880
注 册:2010-10-6
收藏
得分:0 
(1) 修改后的触发器版本是什么样的?

(2) ... 可是唯一的问题是在我第一次输入到药库数据的时候,如果是同时输入的话,触发器就无法分辨我想要的药品...

把你的语句贴上来看看?
2010-10-13 21:57
上帝之允
Rank: 1
等 级:新手上路
帖 子:67
专家分:5
注 册:2010-10-11
收藏
得分:0 
create table 药库
(
   medician_name varchar(20),
   medician_store int check(medician_store>0),
   修改日期 datetime default getdate()
)
create table 入库清单
(
  medician_name varchar(20),
  medician_norms varchar(20),
  medician_number int,
  medician_unit char(10) default '盒',
  medician_unitprice money,
  medician_totalmoney money,
  date datetime default getdate(),
  businessman char(10),
  P_incharge char(10),
  accountant char(10),
  Y_person char(10),
  J_person char(10)
)

if object_id('Trigger1','TR')is not null
drop Trigger Trigger1;
go
create trigger Trigger1 on 入库清单
after insert
as
declare @number int,@name varchar(20);
select @number=medician_number,@name=medician_name from inserted
if(@name not in(select medician_name from 药库))
begin
insert into 药库
select @name,@number,date
from inserted
end
else
begin
insert into 药库
select inserted.medician_name,@number+medician_store,date
from inserted,药库
where 修改日期 = (select top 1 修改日期 from 药库 where medician_name=inserted.medician_name
                  order by 修改日期 desc)
end
go

insert into 药库(medician_name,medician_store)output inserted.* values('感冒冲剂',1000);
insert into 药库 (medician_name,medician_store)output inserted.* values('阿司匹林',500);
insert into 药库 (medician_name,medician_store)output inserted.* values('斯达舒',1500);
insert into 药库(medician_name,medician_store) output inserted.* values('整肠生',1200);

insert into 入库清单  values('整肠生','500g',300,'盒','15.0','4500',getdate(),'刘金宝','李金宝','汤','周杰','蔡')
2010-10-13 22:31
png
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:126
专家分:880
注 册:2010-10-6
收藏
得分:0 
你的 where 语句改得太多了. 将你的一页的语句
...
where @name=药库.medician_name and 修改日期=(select top 1
修改日期 from 药库 order by 修改日期 desc)
...

改成
...
where @name=药库.medician_name and 修改日期=(select top 1
修改日期 from 药库 where medician_name=inserted.medician_name order by 修改日期 desc)
...

看看如何?


2010-10-14 00:28
快速回复:关于触发器的问题
数据加载中...
 
   



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

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