ADD CONSTRAINT DEF_DT DEFAULT 'CHUA CO' FOR DIENTHOAI
ALTER TABLE DONDH
ADD CONSTRAINT
ALTER TABLE CTDONDH
ADD CONSTRAINT CHK_SLDAT CHECK(SLDAT>0)
ALTER TABLE CTPNHAP
ADD CONSTRAINT CHK_SLNHAP CHECK(SLNHAP>0)
ALTER TABLE CTPNHAP
ADD CONSTRAINT CHK_DGNHAP CHECK(DGNHAP>0)
ALTER TABLE CTPXUAT
ADD CONSTRAINT CHK_SLXUAT CHECK(SLXUAT>0)
ALTER TABLE CTPXUAT
ADD CONSTRAINT CHK_DGXUAT CHECK(DGXUAT>0)
ALTER TABLE TONKHO
ADD CONSTRAINT CHK_SLDAU CHECK(SLDAU>=0)
ALTER TABLE TONKHO
ADD CONSTRAINT CHK_TONGSLX CHECK(TONGSLX>=0)
ALTER TABLE TONKHO
ADD CONSTRAINT CHK_TONGSLN CHECK(TONGSLN>=0)
-----------------------------------------------------------
// 3.2
alter table DONDH
ADD CONSTRAINT FK_MANHACC FOREIGN KEY(MANHACC)REFERENCES NHACC(MANHACC)
ON DELETE CASCADE ON UPDATE CASCADE
ALTER TABLE CTDONDH
ADD CONSTRAINT FK_MAVTU FOREIGN KEY(MAVTU) REFERENCES VATTU(MAVTU)
ON DELETE CASCADE ON UPDATE CASCADE
ALTER TABLE CTDONDH
ADD CONSTRAINT FK_SODH FOREIGN KEY(SODH) REFERENCES DONDH(SODH)
ON DELETE CASCADE ON UPDATE CASCADE
ALTER TABLE PNHAP
ADD CONSTRAINT FK_SODH1 FOREIGN KEY(SODH) REFERENCES DONDH(SODH)
ON DELETE CASCADE ON UPDATE CASCADE
ALTER TABLE CTPNHAP
ADD CONSTRAINT FK_MAVTU1 FOREIGN KEY(MAVTU) REFERENCES VATTU(MAVTU)
ON DELETE CASCADE ON UPDATE CASCADE
ALTER TABLE CTPNHAP
ADD CONSTRAINT FK_SOPN FOREIGN KEY(SOPN) REFERENCES PNHAP(SOPN)
ON DELETE CASCADE ON UPDATE CASCADE
ALTER TABLE CTPXUAT
ADD CONSTRAINT FK_MAVTU2 FOREIGN KEY(MAVTU) REFERENCES VATTU(MAVTU)
ON DELETE CASCADE ON UPDATE CASCADE
ALTER TABLE CTPXUAT
ADD CONSTRAINT FK_SOPX FOREIGN KEY(SOPX) REFERENCES PXUAT(SOPX)
ON DELETE CASCADE ON UPDATE CASCADE
----------------------------------------------------------------
//3.4 a
create view vw_dmvt(mavtu,tenvtu)
as
select mavtu,tenvtu from vattu
--------------------------------------------------------------
create view vw_ctpxuat
as
select sopx,mavtu,slxuat,dgxuat, slxuat*dgxuat as thanhtien
from ctpxuat
// su dung view vw_ctpxuat
select * from vw_ctpxuat
----------------------------------
3.4 b
create view vw_dondh_tongslnhap
as
select sodh,tongsln
from dondh,tonkho
// su dung vew
select * from vw_dondh_tongslnhap
........
exec sp_helptext vw_dondh_tongslnhap
----------------------------------------
// 3.4 c
create view vw_dondh_tongsldatnhap(sodh,tongsldat,tongslnhap)
as
select pnhap.sodh,
(select sum(sldat) from ctdondh
where ctdondh.sodh=pnhap.sodh
group by sodh) as 'tongsldat',
sum(slnhap) as'tongslnhap'
from pnhap,ctpnhap
where ctpnhap.sopn=pnhap.sopn
group by sodh
//su dung
select * from vw_dondh_tongsldatnhap
------------------------------------------
// 3.4 d
create view vw_dondh_danhapdu(sodh,thongbao)
as
select sodh,thongbao=case
when tongsldat=tongslnhap then'da nhap du' else 'chua nhap du'
end
from vw_dondh_tongsldatnhap
//su dung
select * from vw_dondh_danhapdu
-------------------------------------------
//3.4 e
create view vw_tongnhap(namthang,mavtu,tongslnhap)
as
select (right(convert(char(10),ngaynhap,101),4)+'-'+left(convert(char(10),ngaynhap,101),2)),mavtu,
sum(slnhap) from ctpnhap,pnhap
where ctpnhap.sopn=pnhap.sopn
group by ngaynhap,mavtu
//xem view
select * from vw_tongnhap
---------------------------------
//3.4 f
create view vw_tongxuat(namthang,mavtu,tongslxuat)
as
select(right(convert(char(10),ngayxuat,101),4)+'-'+left(convert(char(10),ngayxuat,101),2)),mavtu,
sum(slxuat) from ctpxuat,pxuat
where ctpxuat.sopx=pxuat.sopx
group by ngayxuat,mavtu
//xem view
select* from vw_tongxuat
-----------------------------
//3.4 g
create view vw_dondh_mavtu_tongslnhap
as
select dondh.sodh,ngaydh,mavtu,sldat,
(select sum(slnhap)from ctpnhap
where ctpnhap.mavtu=ctdondh.mavtu group by mavtu)as tongslnhap
from dondh,ctdondh
where dondh.sodh=ctdondh.sodh
// xem view
select * from vw_dondh_mavtu_tongslnhap
----------------------------------
//3.5 a
select* from dondh
where sodh not in (select sodh from ctdondh)
--------------------------------------
//3.5 b
select* from vattu
where mavtu not in(select mavtu from ctdondh)
----------------------------------------
//3.5 c
select manhacc,count(manhacc)as tongsodh
from dondh group by manhacc
having count(manhacc)>=all(select count(manhacc)
from dondh group by manhacc)
-----------------------------------------------
//3.5 d
select top 1 mavtu,sum(slxuat) as tongslxuat
from ctpxuat group by mavtu
order by sum(slxuat) desc
-----------------------------------------------
//3.5 e
select top 1 sodh,count(mavtu) as tongmathang
from ctdondh group by sodh
order by count(mavtu) desc
----------------------------------------------
//3.5 f
select ngaynhap,vattu.mavtu,ngayxuat,tenvtu,sum(slnhap)as tongslnhap,sum(slxuat) as tongslxuat
from pnhap,pxuat,vattu,ctpxuat,ctpnhap
where pnhap.sopn=ctpnhap.sopn and pxuat.sopx=ctpxuat.sopx and ctpxuat.mavtu=vattu.mavtu and ctpnhap.mavtu=vattu.mavtu
group by ngaynhap,vattu.mavtu,ngayxuat,tenvtu
----------------------------------------
//3.5 g
select dondh.sodh,ctpnhap.mavtu,sldat,sum(slnhap) as tongslnhap
from dondh,ctdondh,ctpnhap
where ctpnhap.mavtu=ctdondh.mavtu and ctdondh.sodh=dondh.sodh
group by dondh.sodh,ctpnhap.mavtu,sldat
--------------------------------------------
//3.5 h
select ngaydh,vattu.mavtu,vattu.tenvtu,sum(sldat)as tongsldat
from vattu,dondh,ctdondh
where ctdondh.mavtu=vattu.mavtu and ctdondh.sodh=dondh.sodh
group by ngaydh,vattu.mavtu,vattu.tenvtu
-------------------------------------------
//3.5 i
select (right(convert(char(10),ngaydh,101),4)+'-'+left(convert(char(10),ngaydh,101),2))
as namthang,vattu.mavtu,tenvtu,sum(sldat)
from dondh,ctdondh,vattu
where dondh.sodh=ctdondh.sodh and vattu.mavtu=ctdondh.mavtu
group by ngaydh,vattu.mavtu,tenvtu
------------------------------------------
//3.5 j
select sodh,thongbao='chua nhap du'
from vw_dondh_tongsldatnhap
where tongsldat!=tongslnhap
-------------------------------------------
* *
*
-------------------------------------------
//4.1 a
select * from vattu
order by tenvtu desc
----------------------------
//4.1 b
select * from nhacc
where diachi like '%Q1 HCM%'
order by tennhacc asc
---------------------------
4.1 c
select sopn,mavtu,slnhap,dgnhap,thanhten=slnhap*dgnhap
from ctpnhap
------------------------------
4.1 d
select pnhap.sopn,ngaynhap,sodh,trigia=sum(slnhap*dgnhap)
from pnhap,ctpnhap
where ctpnhap.sopn=pnhap.sopn
group by pnhap.sopn,ngaynhap,sodh
-----------------------------------
4.1 e
select manhacc,tennhacc
from nhacc
where manhacc not in(select manhacc from dondh)
-----------------------------------
4.2 f
select pxuat.sopx,trigia=sum(slxuat*dgxuat)
from ctpxuat,pxuat
where ctpxuat.sopx=pxuat.sopx
group by pxuat.sopx
order by trigia desc
--------------------------------------
4.2 g
delete from ctdondh
from dondh
where convert(char(10),ngaydh,103)='15/01/2005'
and dondh.sodh=ctdondh.sodh
--------------------------------------
4.1 i
delete from ctpxuat
-------------------------------------
4.1 j
(1)
select sopx,mavtu,slxuat,dgxuat,ttien=slxuat*dgxuat
from ctpxuat
order by sopx
compute sum(slxuat*dgxuat) by sopx
(2)
select mavtu,sopn,slnhap,dgnhap
from ctpnhap
order by mavtu
compute sum(slnhap),min(dgnhap),max(dgnhap) by mavtu
------------------------------------------
//4.2 a
(c1)
declare @dtb real
select @dtb=avg(dgxuat)
from ctpxuat
where mavtu in (select mavtu from vattu where tenvtu='Ð?u DVD Hitachi 1 dia')
print 'don gia trung binh cua dau dvd hitachi1 la'+cast(@dtb as char(10))
if @dtb>3800000
print 'khong nen thay doi gia ban'
else
print 'da den luc tang ga ban'
(c2)
DECLARE @A REAL
SELECT @A=AVG(DGXUAT)
FROM CTPXUAT,VATTU
WHERE CTPXUAT.MAVTU=VATTU.MAVTU
AND VATTU.MAVTU='DD01'
Print 'Don gia trung binh cua dau DVD Hitachi1 la' + CAST(@A as char(4))
IF @A>3800000
PRINT ' khong nen thay doi gia ban'
else
PRINT ' Da den luc tang gia ban'
--------------------------------------------------------------
4.2 b
declare @dem int
select @dem=count(*)
from dondh
where datename(dw,ngaydh)='sunday'
if(@dem>0) --co don dat hang ko hop le--
select * from dondh
where datename(dw,ngaydh)='sunday'
else
print 'ngay lap cac don dat hang deu la hop le'
------------------------------------------------------
4.2 c
declare @dem int
select @dem=count(sodh)
from pnhap
where sodh='d001'
if(@dem>0)
print('có '+cast(@dem as char(4))+' so phieu nhap hang cho don dat hang d001')
else
print' chua co nhap hang nao cho d001'
-----------------------------------------------------
4.3 a
select mavtu,tenvtu into vattu_temp
from vattu
declare @mavtu char(4),@tenvtu char(100)
while exists(select * from vattu_temp)
select top 1 @mavtu=mavtu,@tenvtu=tenvtu from vattu_temp
delete vattu_temp where mavtu=@mavtu
print 'dang xoa vat tu: '+@tenvtu
end
Drop table VATTU_temp
--------------------------------------------
4.3 b
--chua xong dang nghj~ hehe
alter table vattu_temp
add sopx char(4), dgxuat float
declare @dgtb real,@dem int,@dgxuat float
set @dem=1
select @dgtb=avg(dgxuat) from ctpxuat where mavtu='dd01'
while( @dgtb<350000)
set dgxuat=dgxuat+dgxuat*5/100
set @dem=@dem+1
select
end
select dgxuat=@dgxuat from ctpxuat
print 'da thuc hien tang'+cast(@dem as char(4))
--------------------------------------------
4.4 a
select *,thu = case datename(dw,ngaydh)
when 'sunday' then 'chu nhat'
when 'monday' then 'thu hai'
when 'tuesday' then 'thu ba'
when 'wednesday' then 'thu tu'
when 'thursday' then 'thu nam'
when 'saturday' then 'thu bay'
end
from dondh
--------------------------------------------
4.4 b
update ctpxuat
set dgxuat=case
when slxuat<4 then dgxuat
when slxuat>=4 and slxuat<10 then dgxuat-dgxuat*5/100
when slxuat>=10 and slxuat<=20 then dgxuat - dgxuat*10/100
when slxuat>20 then dgxuat -dgxuat*20/100
end
where sopx in(select sopx from pxuat
where convert(char(6),ngayxuat,112)='200501')
select * from ctpxuat
-------------------------------------------------
-----------------------------------------------------
5.1 a
create proc spud_dondh_tinhsldat
@sodh char(4),@mavtu char(4),@sldat int output
as
declare @kq int
select @kq=sldat from ctdondh
where sodh=@sodh and mavtu=@mavtu
set @sldat=@kq
--sudung
declare @sldat int
exec spud_dondh_tinhsldat 'd001','dd01',@sldat output
print @sldat
-------------------------------------
5.1 b
alter proc spud_pnhap_tinhtongslnhang @sodh char(4),@mavtu char(4),@tongnhap int output
as
declare @kg int
select @kg=sum(slnhap)
from ctpnhap a inner join pnhap b on a.sopn=b.sopn
where mavtu=@mavtu and sodh=@sodh
set @tongnhap=isnull(@kg,0)
--su dung
declare @tongnhap int
exec spud_pnhap_tinhtongslnhang 'd001','dd02',@tongnhap output
print @tongnhap
----------------------------------------
5.1 c
create proc spud_tonkho_tinhlsdau @namthang char(6),@mavtu char(4),@sldau int output
as
declare @kq int
select @kq=sldau from tonkho where namthang=@namthang and mavtu=@mavtu
set @sldau=isnull(@kq,0)
declare @sldau int
exec spud_tonkho_tinhlsdau '200502','vd01',@sldau output
print @sldau
------------------------------------------------------
5.2 a
create proc spud_vattu_them
@mavtu char(4),@tenvtu nvarchar(100),@dvtinh nvarchar(10),@phantram real
as
-- kiem tra ma vat tu chua co trong bang vattu
if (select count(*) from vattu where mavtu=@mavtu)>0
print 'Mavtu da trung mavtu trong bang, nhap lai!'
return
end
-- them mau tin
insert into vattu values (@mavtu,@tenvtu,@dvtinh,@phantram)
-- Su dung
exec spud_vattu_them 'tv22','tivi sony 26 inches','cai',10
-- Xem sua chua
select * from vattu
-----------------------------------------------------
5.2 b
create proc spud_vattu_xoa @mavtu char(4)
as
if(select count(mavtu) from ctdondh where mavtu=@mavtu) >0
print 'mavtu da co trong bang ctdondh'
return
end
if(select count(mavtu) from ctpnhap where mavtu=@mavtu)>0
print 'mavtu da co trong bang ctpnhap'
return
end
if(select count(mavtu) from ctpxuat where mavtu=@mavtu)>0
print 'mavtu da co trong bang ctpxuat'
return
end
if(select count(mavtu) from ctdondh where mavtu=@mavtu) >0
print 'mavtu da co trong bang tonkho'
return
end
delete from vattu where mavtu=@mavtu
-- Su dung
exec spud_vattu_xoa 'tv22'
-- Xem sua chua
select * from vattu
select * from ctdondh
-------------------------------------------------------
5.1 c
create proc spud_vattu_sua
@mavtu char(4),@tenvtu nvarchar(100),@dvtinh nvarchar(10),@phantram real
as
update vattu
set tenvtu=@tenvtu,dvtinh=@dvtinh,phantram=@phantram
where mavtu=@mavtu
-- Su dung
exec spud_vattu_sua 'tv21','tivi sony 26 inches','cai',10
-- xem sua chua!
select * from vattu
-----------------------------------------------
5.3 a
create proc spud_vattu_bcaodanhsach
as
select * from vattu
order by tenvtu
exec spud_vattu_bcaodanhsach
----------------------------------------
5.3 b
create proc spud_tonkho_bcaotonkho @namthang char(6)
as
select namthang,vattu.mavtu,tenvtu,sldau,tongsln,tongslx,slcuoi from vattu,tonkho where vattu.mavtu=tonkho.mavtu and namthang=@namthang
-- su dung
exec spud_tonkho_bcaotonkho '200501'
---------------------------------------------------
5.3 c
create proc spud_pxuat_bcaopxuat @sopx char(4)=null
as
if @sopx is null
select pxuat.sopx,mavtu,ngayxuat,tenkh,slxuat,dgxuat from ctpxuat,pxuat where pxuat.sopx=ctpxuat.sopx
else
select pxuat.sopx,mavtu,ngayxuat,tenkh,slxuat,dgxuat from ctpxuat,pxuat where pxuat.sopx=ctpxuat.sopx and pxuat.sopx=@sopx
-- Su dung
exec spud_pxuat_bcaopxuat
exec spud_pxuat_bcaopxuat 'x003'
---------------------------------------------------
--------------------------------------------------------
5.4 a
create proc spud_dondh_them
@sodh char(4),@ngaydh datetime,@manhacc char(3)
as
if (select count(sodh) from dondh where sodh=@sodh)>0
print' so dh da trung'
return
end
if(select count(manhacc) from nhacc where manhacc=@manhacc)=0
print'manhacc khong co ben bang nhacc'
return
end
if @ngaydh is null
insert into dondh values (@sodh,getdate(),@manhacc)
else
insert into dondh values (@sodh,@ngaydh,@manhacc)
-- Van chua xong dang loi phan convert ngaydh ko bit lam ntn ca ^_^ --
exec spud_dondh_them 'd007','c07','01/01/2008'
exec spud_DONDH_Them 'D006','01/01/2008','C01'
--------------------------------------------------------------
5.4 b
create proc spud_dondh_xoa @sodh char(4)
as
if (select count(sodh) from pnhap where sodh=@sodh)>0
print 'so dat hang da co trong bang pnhap'
return
end
delete from dondh where sodh=@sodh
-- Lai sai tiep ko hieu vi sao nua@@ --
exec spud_dondh_xoa ''
select * from dondh
------------------------------------------------
5.4 f
Create proc spud_CTDONDH_Sua
@SoDH char(4), @MaVTu char(4), @SLDat int
as
Begin
if (not exists (select * from CTDONDH where SoDH=@SoDH and MaVTu=@MaVTu))
print' SoDH va MaVTu nay chua co trong bang DonDH!'
return
end
-----------------------------------------------
6.1.a
create function fn_tongnhapthang(@namthang char(6),@mavtu char(4))
returns int
as
declare @kq int
select @kq=sum(slnhap)
from ctpnhap,pnhap
where ctpnhap.sopn=pnhap.sopn and mavtu=@mavtu and convert(char(6),ngaynhap,112)=@namthang
return isnull(@kq,0)
end
--Su dung
declare @tong int
set @tong=dbo.fn_tongnhapthang('200201','dd01')
print @tong
-- test
select sum(slnhap) from ctpnhap,pnhap
where ctpnhap.sopn=pnhap.sopn
and mavtu='dd01' and convert (char(6),ngaynhap,112)='200201'
--------------------------------------
6.1 b
create function fn_tongxuatthang(@namthang char(6),@mavtu char(4))
returns int
as
declare @kq int
select @kq=sum(slxuat)
from ctpxuat,pxuat
where ctpxuat.sopx=pxuat.sopx
and mavtu=@mavtu
and convert(char(6),ngayxuat,112)=@namthang
return isnull(@kq,0)
end
--Su dung
declare @tong int
set @tong=dbo.fn_tongxuatthang('200201','dd01')
print @tong
--Test roi chuan ko can chinh ^^
----------------------------------------
6.1 c
create function fn_tongnhap(@sodh char(4),@mavtu char(4))
returns int
as
declare @kq int
select @kq=sum(slnhap) from ctpnhap,pnhap
where ctpnhap.sopn=pnhap.sopn
and sodh=@sodh and mavtu=@mavtu
return isnull(@kq,0)
end
-- Su dung
declare @tong int
set @tong=dbo.fn_tongnhap('d001','dd01')
print @tong
------------------------------
6.1 d
create function fn_connhap(@sodh char(4),@mavtu char(4))
returns int
as
declare @kq int,@sldat int
select @sldat=sum(sldat) from ctdondh
where sodh=@sodh and mavtu=@mavtu
set @kq=@sldat-dbo.fn_tongnhap(@sodh,@mavtu)
return isnull(@kq,0)
end
--su dung nhanh
print dbo.fn_connhap('d001','dd01')
-- chac chuan roi nhanh nhanh làm cái khác
---------------------------
6.1.e
create function fn_toncuoi(@mavtu char(4),@namthang char(6))
returns int
as
declare @kq int
select @kq=slcuoi from tonkho
where mavtu=@mavtu and namthang=@namthang
return isnull(@kq,0)
end
-- Su dung nhanh
print dbo.fn_toncuoi('dd01','200201')
------------------------------------
---------------------------------------
6.2.a
create function fn_ds_vattuconnhap(@sodh char(4))
returns table
as
return (select ctdondh.sodh,vattu.mavtu,tenvtu,dbo.fn_connhap(@sodh,vattu.mavtu)as slconnhap from vattu,ctdondh
where ctdondh.mavtu=vattu.mavtu
and sodh=@sodh and dbo.fn_connhap(@sodh,vattu.mavtu)>0)
--Su dung
select * from dbo.fn_ds_vattuconnhap('d001')
--------------------------------------
create function fn_ds_vattutonkho(@namthang char(6),@toithieu int)
returns table
as
return(select mavtu from tonkho
where namthang=@namthang
and slcuoi>@toithieu)
--Su dung
select * from dbo.fn_ds_vattutonkho('200201','4')
-------------------------------------
6.3.a
create function fn_ds_tonkho_lech_1thang(@namthang char(6))
returns @DSVT TABLE
( mavtu char(4),
sldau int,
slcuoi int
as
-- thôi dài lam bo qua
----------------------------------
----------- Trigger---------------
7.1.a
create trigger tg_pnhap_them on pnhap
for insert
as
declare @sodh char(4),@ngaynhap datetime
-- nhan du lieu
select @sodh=sodh,@ngaynhap=ngaynhap from inserted
--Kiem tra dk 1
if not exists (select * from dondh where sodh=@sodh)
raiserror('So dondh ko hop le',16,1)
rollback tran
return
end
--Kiem tra dk 2
declare @ngaydh datetime
select @ngaydh=ngaydh from dondh where sodh=@sodh
if @ngaynhap<@ngaydh
declare @loi char(200)
set @loi='Ngay nhap phai sau ngay:'+convert(char(10),@ngaydh,103)
raiserror (@loi,16,1)
rollback tran
return
end
-- Su dung
alter table pnhap nocheck constraint all
insert into pnhap values ('N200','1/1/2002','d003')
-- ? dây chú ý cái ràng bu?c add contrain mình dã làm t? tru?c nên nó uu tiên cái dó tru?c r?i m?i d?n trigger
--------------------------------------------
7.1.b
create trigger tg_ctpnhap_them on ctpnhap
for insert
as
declare @slnmoi int,@tongsldat int,@tongslncu int,@mavtumoi char(4)
select @mavtumoi=mavtu from inserted
select @slnmoi=slnhap from inserted
select @tongslncu=sum(slnhap)-@slnmoi from ctpnhap
where mavtu=@mavtumoi
select @tongsldat =sum(sldat) from ctdondh
where mavtu=@mavtumoi
if @slnmoi>(@tongsldat-@tongslncu)
declare @loi char(200)
set @loi='khong duoc vuot qua'+cast((@tongsldat-@tongslncu) as char(3))
raiserror(@loi,16,1)
rollback tran
return
end
-- Test
alter table ctpnhap nocheck constraint all
insert into ctpnhap values('n005','tv29','100','200000')
select * from ctpnhap
---------------------------------------------
7.2.a
create trigger tg_pxuat_xoa on pxuat
for delete
as
declare @sopx char(4)
select @sopx=sopx from deleted
delete from ctpxuat where sopx=@sopx
--Test
select * from ctpxuat
select * from pxuat
delete from pxuat where sopx='x006'
-----------------------------------
7.2.b
create trigger tg_pnhap_xoa on pnhap
for delete
as
declare @sopn char(4)
select @sopn=sopn from deleted
delete from ctpnhap where sopn=@sopn
--Test----
delete from pxuat where sopn=''
------------------------------------------
7.3.a
create trigger tg_pnhap_sua on pnhap
for update
as
-- Dieu kien 1
if update(sopn)or update(sodh)
rollback tran
raiserror('khong the thay doi sodh hay so pn',16,1)
return
end
-- Dieu kien 2
if update(ngaynhap)
if exists(select * from pnhap where sopn in(select sopn from deleted))
declare @maxngaynhap datetime
select @maxngaynhap=max(pnhap.ngaynhap) from pnhap,deleted
where pnhap.sopn=deleted.sopn
-- kiem tra ngay nhap phai sau ngay dat hang
if @maxngaynhap>(select ngaynhap from inserted)
declare @loi char(200)
set @loi='ngay dat hang phai sau ngay'+ convert(char(10),@maxngaynhap,103)
raiserror(@loi,16,1)
rollback tran
return
end
end
end
--test
select * from pnhap
alter table pnhap nocheck constraint all
update pnhap set sodh='n100' where sodh='n001'
-- oi roi oi qua chuan lun hi' hi'! di gia truyen roi lam tiep
------------------------------
7.3 b
create trigger tg_pxuat_sua on pxuat
for update
as
if update(sopx)
raiserror('ko duoc sua so px',16,1)
rollback tran
return
end
if update(ngayxuat)
if exists(select * from pxuat where sopx in (select sopx from deleted))
declare @ngayxuat datetime
select @ngayxuat=ngayxuat from deleted
if convert(char(6),@ngayxuat,112)<> (select convert(char(6),ngayxuat,112) from inserted)
declare @loi char(200)
set @loi='ngay xuat phai cung nam thang:'+ convert(char(6),@ngayxuat,112)
raiserror (@loi,16,1)
return
end
end
end
--Test
alter table pxuat nocheck constraint all
update pxuat set ngayxuat='',tenkh='' where sopn=''
select * from pxuat
--me oi met qua di thoi gio moi den 7.4 nghi ma nan qua
-------------------------------------------
7.4.a
--tao cot tongtg
alter table pnhap add tongtg float
update pnhap
set tongtg=( select sum(slnhap*dgnhap) from ctpnhap where sopn=pnhap.sopn)
select * from pnhap
--bat dau trigger
alter trigger tg_ctpnhap_them on ctpnhap
for insert
as
declare @sopn char(4),@mavtu char(4),@slnhap int,@dgnhap money
select @sodh=sopn,@mavtu=mavt,@slnhap=slnhap from inserted
--kiem tra 1
declare @sodh char(4)
select @sodh=sodh from pnhap where sopn=@sopn
if not exists(select * from ctdondh where sodh=@sodh and mavtu=@mavtu)
raiserror('ma vat tu chua co dat',16,1)
rollback tran
return
end
--xu li tinh toan 1
update pnhap set tg=tg+@slnhap*@dgnhap where sopn=@sopn
--Xu li tinh toan 2
declare @namthang char(6)
select @namthang=convert(char(6),ngaynhap,112)
from pnhap where sopn=@sopn
update tonkho set tongslnhap=tongslnhap+@slnhap*@dgnhap where namthang=@namthang and mavtu=@mavtu
-- Thuc hien---
-- Mai thi tren giay chan qua hoc hanh gi nua.... ko lam n?a
7.4b
Alter table PXUAT
add TongTG int
Update PXUAT
set TongTG=(select sum(SLXuat*DgXuat)from CTPXUAT where CTPXUAT.SoPX=PXUAT.SoPX group by SoPX)
from CTPXUAT
where CTPXUAT.SoPX=PXUAT.SoPX
Create trigger tg_PXUAT_Them
on CTPXUAT
for insert
as
Begin
Declare @SoPX char(4),@MaVTu char(4),@SLXuat int, @DgXuat money
select @SoPX=SoPX,@MaVTu=MaVTu,@SLXuat=SLXuat,@DgXuat=DgXuat
from inserted
if(not exists (select * from PXUAT where @SoPX=SoPX))
RollBack Tran
raiserror('SoPX phai co trong bang PXUAT!',16,1)
end
if( not exists (select * from VATTU where @MaVTu=MaVTu))
RollBack Tran
raiserror('MaVTu phai co trong bang VATTU!',16,1)
end
if( not exists (select * from TONKHO where @MaVTu=MaVTu having (sum(SLDau)-sum(TongSLN)-Sum(TongSLX))>= @SLXuat ))
RollBack Tran
Raiserror('SLXuat phai du trong bang TONKHO!',16,1)
end
Update PXUAT
Bạn đang đọc truyện trên: truyentop.pro