create trigger tr1 on lt
for insert ,deleteas
if
update kc set sl=sl+(case (select rc from inserted) when 0 then (0- (select sl from inserted)) else (select sl from inserted) end) where cpbh in (select cpbh from inserted)
update kc set sl=sl
测试如下:
go
insert into kc select '001','1',100
insert into lt select '001','1',0,10
select * from kc
我给你编写一个,自己在完善吧!
解决方案 »
- Order by 问题???
- sql server2005 查询当前列的最大值 varchar类型
- 我的机器在通过ODBC连接一个SQL SERVER服务器时,发现它不停的连接这个SQLSERVER服务器的445端口和139端口,是不是中木马了
- 小弟有两个数据方面的疑问?请各位高手解决一下
- 使用存储过程,但非常慢,帮忙看看
- 请问应该使用事务还是使用锁 ???
- 这样的表间关联的查询可以实现吗??????急!!!!!!!
- 大家说说MS-SQL Server在Linux或者UNIX下的优缺点
- Oracle数据库的实时性
- SQL语句
- 更新触发器中,请教是否能获取更新前的值
- 简单问题:将检索结果保存到excel文件中的sql语句中的“xaction”是啥意思?咋没查到呢?
for insert ,delete,updateas
if
update kc set sl=sl+(case (select rc from inserted) when 0 then (0- (select sl from inserted)) else (select sl from inserted) end) where cpbh in (select cpbh from inserted)update kc set sl=sl-(case (select rc from deleted) when 0 then (0- (select sl from deleted)) else (select sl from deleted) end) where cpbh in (select cpbh from deleted)
CREATE TRIGGER UP_IN_DE_storelog ON [dbo].[StoreLog]
FOR INSERT, UPDATE, DELETE AS
@IN_OUT bit
if (Select 入出 form 日志记录表)='1'--当为入库时
--如果是修改和删除,则deleted表中有数据
UPDATE 仓库表 SET 数量=a.数量+b.数量 FROM 仓库表 a,deleted b
--WHERE a.仓库=b.仓库 AND a.产品编号=b.产品编号 --如果是新增和修改,则inserted表中有数据
UPDATE 仓库表 SET 数量=a.数量-b.数量 FROM 仓库表 a,inserted b
WHERE a.仓库=b.仓库 AND a.产品编号=b.产品编号
else --当为出库时
UPDATE 仓库表 SET 数量=a.数量-b.数量 FROM 仓库表 a,deleted b
--WHERE a.仓库=b.仓库 AND a.产品编号=b.产品编号--如果是新增和修改,则inserted表中有数据
UPDATE 仓库表 SET 数量=a.数量+b.数量 FROM 仓库表 a,inserted b
WHERE a.仓库=b.仓库 AND a.产品编号=b.产品编号
--创设入出为0时代表入,为1时代表出
create trigger t_process on 日志记录表
for insert,update,delete
as
--更新仓库表中已经有产品的数量
update 仓库表 set 数量=isnull(a.数量,0)+isnull(b.数量,0)
from 仓库表 a join(
select 产品编号,仓库,数量=sum(case 入出 when 0 then 数量 else -数量 end)
from inserted group by 产品编号,仓库
) b on a.产品编号=b.产品编号 and a.仓库=b.仓库--插入仓库表中不存在的产品数量
insert into 仓库表(产品编号,仓库,数量)
select a.* from (
select 产品编号,仓库,数量=sum(case 入出 when 0 then 数量 else -数量 end)
from inserted group by 产品编号,仓库
) a left join 仓库表 b on a.产品编号=b.产品编号 and a.仓库=b.仓库
where b.产品编号 is null and b.仓库 is null--减少删除的产品数量
update 仓库表 set 数量=isnull(a.数量,0)-isnull(b.数量,0)
from 仓库表 a join(
select 产品编号,仓库,数量=sum(case 入出 when 0 then 数量 else -数量 end)
from deleted group by 产品编号,仓库
) b on a.产品编号=b.产品编号 and a.仓库=b.仓库
go
create trigger t_process on 日志记录表
for insert,update,delete
as
--判断是否有足够的库存
if exists(select 1 from 仓库表 a join(
select 产品编号,仓库,数量=sum(case 入出 when 0 then 数量 else -数量 end)
from inserted group by 产品编号,仓库
) b on a.产品编号=b.产品编号 and a.仓库=b.仓库
where isnull(a.数量,0)+isnull(b.数量,0)<0)
begin
raiserror('库存不足,操作无法进行',1,16)
rollback tran
end
else
begin
--更新仓库表中已经有产品的数量
update 仓库表 set 数量=isnull(a.数量,0)+isnull(b.数量,0)
from 仓库表 a join(
select 产品编号,仓库,数量=sum(case 入出 when 0 then 数量 else -数量 end)
from inserted group by 产品编号,仓库
) b on a.产品编号=b.产品编号 and a.仓库=b.仓库--插入仓库表中不存在的产品数量
insert into 仓库表(产品编号,仓库,数量)
select a.* from (
select 产品编号,仓库,数量=sum(case 入出 when 0 then 数量 else -数量 end)
from inserted group by 产品编号,仓库
) a left join 仓库表 b on a.产品编号=b.产品编号 and a.仓库=b.仓库
where b.产品编号 is null and b.仓库 is null
end--减少删除的产品数量
update 仓库表 set 数量=isnull(a.数量,0)-isnull(b.数量,0)
from 仓库表 a join(
select 产品编号,仓库,数量=sum(case 入出 when 0 then 数量 else -数量 end)
from deleted group by 产品编号,仓库
) b on a.产品编号=b.产品编号 and a.仓库=b.仓库
go