| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1465 人关注过本帖
标题:关于触发器的问题
只看楼主 加入收藏
上帝之允
Rank: 1
等 级:新手上路
帖 子:67
专家分:5
注 册:2010-10-11
结帖率:73.68%
收藏
已结贴  问题点数:20 回复次数:23 
关于触发器的问题
我刚自学了触发器,想做一个药的数据库
目的是向入库清单中插入数据的时候,希望药库也相应改变
可是只能改变第一次插入入库清单时的药品,不知道为什么,请指教
if object_id('Trigger1','TR')is not null
drop Trigger Trigger1;
go
create trigger Trigger1 on 入库清单
after insert
as
declare @number int,@name varchar(15);
select @number=medician_number,@name=medician_name from inserted
if(@name not in(select medician_name from 药库))
begin
insert into 药库(medician_name,medician_store,修改日期)
select @name,@number,date
from inserted
end
else
begin
insert into 药库
select @name,@number+medician_store,date
from inserted,药库
where @name=药库.medician_name and 修改日期=(select top 1
修改日期 from 药库 order by 修改日期 desc)
end
go
搜索更多相关主题的帖子: 触发器 
2010-10-11 21:58
gameohyes
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:53
帖 子:1275
专家分:3629
注 册:2009-3-5
收藏
得分:6 
按照你讲的作用做了个类似的.(看看是否符合)
程序代码:
use master
drop table temp
create table temp(
    id int not null primary key identity(1,1),
    sj int not null
)
drop table temp1
create table temp1(
    id int not null primary key identity(1,1),
    sj int not null,
)
drop trigger tri_temp
create trigger tri_temp
on temp
for insert
as
if((select sj from inserted) not in(select sj from temp1))
begin
    insert into temp1 select sj from inserted
end
else 
begin
    update temp1 set sj=sj+(select sj from inserted) 
where id=(select id from temp1 where sj in(select sj from inserted))
end
insert into temp values(132)
select * from temp
select * from temp1

C#超级群 74862681,欢迎大家的到来!
2010-10-11 23:00
上帝之允
Rank: 1
等 级:新手上路
帖 子:67
专家分:5
注 册:2010-10-11
收藏
得分:0 
好像还是不行,我不明白为什么每次药库里改变的都是第一次输入入库清单里的药品
我的药库,没有主键,是记录每次药品的增长之后的库存的。
2010-10-11 23:17
gameohyes
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:53
帖 子:1275
专家分:3629
注 册:2009-3-5
收藏
得分:0 
你再试试,不行的话,把表结构发上来,这样大家就可以减少建表的过程了.直接交流,多方便.明天见

C#超级群 74862681,欢迎大家的到来!
2010-10-11 23:27
上帝之允
Rank: 1
等 级:新手上路
帖 子:67
专家分:5
注 册:2010-10-11
收藏
得分:0 
where 修改日期 = (select top 1 修改日期 from 药库 where medician_name=@name order by
修改日期 desc) 我用这句话替换了先前的最后一句,有些改善,可是还是不行,我想问的是这句话可不可以
完成条件是指定药品离现在最近的一条记录
2010-10-12 12:46
gameohyes
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:53
帖 子:1275
专家分:3629
注 册:2009-3-5
收藏
得分:0 
程序代码:
else //@name in(select medician_name from 药库) 那么应该是更新了吧,不需要再次插入了吧
begin
insert into 药库
select @name,@number+medician_store,date
from inserted,药库
where @name=药库.medician_name and 修改日期=(select top 1
修改日期 from 药库 order by 修改日期 desc)
end
go

C#超级群 74862681,欢迎大家的到来!
2010-10-12 12:59
上帝之允
Rank: 1
等 级:新手上路
帖 子:67
专家分:5
注 册:2010-10-11
收藏
得分:0 
我希望的是插入,不想跟新,可是插入的话一直实现不了
2010-10-12 13:04
上帝之允
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)
)

insert into 入库清单  values('感冒冲剂','500g',300,'盒','15.0','4500',getdate(),'刘金宝','李金宝','汤唯','周','蔡')
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);
2010-10-12 13:09
上帝之允
Rank: 1
等 级:新手上路
帖 子:67
专家分:5
注 册:2010-10-11
收藏
得分:0 
又使了一下,发现当我将药库中的四项第一次全部同时输入的时候,就会出现插入入库清单的时候,无法成功插入药库中,出现无法选择指定药品离插入时间最近记录
2010-10-12 16:05
上帝之允
Rank: 1
等 级:新手上路
帖 子:67
专家分:5
注 册:2010-10-11
收藏
得分:0 
还有个问题,我想实现插入入库清单,随之药库的数据也随之改变的功能除了触发器,别的可以吗
2010-10-12 20:28
快速回复:关于触发器的问题
数据加载中...
 
   



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

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