日期:2014-05-16 浏览次数:20785 次
-- 建测试表
create table ly(nid int identity(1,1),ndate varchar(15),ntype varchar(10),nqty int)
-- 建触发器
create trigger tr_ly on ly
for update
as
begin
if update(ndate)
begin
select row_number() over(order by cast(ndate as datetime)) 'rn',ntype,nqty
into #t
from ly
if exists(
select 1 from #t t
where (select sum(case u.ntype
when '入' then u.nqty
when '出' then -1*u.nqty
else 0 end) 'inv'
from #t u
where u.rn<=t.rn)<0
)
begin
print '库存<0,不能调整.'
rollback tran
end
end
end
-- 测试1
truncate table ly
insert into ly(ndate,ntype,nqty)
select '2014-03-01','入',4000 union all
select '2014-03-15','出',2000
-- 3月1号改为3月14号 4000-2000 >0 OK 可以更改
update ly set ndate='2014-03-14' where nid=1
select * from ly
/*
nid ndate ntype nqty
----------- --------------- ---------- -----------
1 2014-03-14 入 4000
2 2014-03-15 出 2000
(2 row(s) affected)
*/
-- 3月1号改为3月15号 4000-2000>0 OK 可以更改
update ly set ndate='2014-03-15' where nid=1
select * from ly
/*
nid ndate ntype nqty
----------- --------------- ---------- -----------
1 2014-03-15 入 4000
2 2014-03-15 出 &nb