You are on page 1of 16

Cho CSDL7 gm: Mathang (mahang, tenhang, soluong) Nhatkybanhang (stt, ngay, nguoimua, mahang, soluong, giaban) 1.

nh ngha trigger trg_nkbh_insert. Trigger ny c chc nng t ng gim s lng hng hin c khi mt mt hng no c bn (tc l khi cu lnh INSERT c thc thi trn bng NHATKYBANHANG).
create trigger trg_nkbh_insert on nhatkybanhang for insert AS update mathang set mathang.soluong=mathang.soluong-inserted.soluong from mathang, inserted where mathang.mahang=inserted.mahang select * from mathang where mahang='H1' insert into nhatkybanhang(ngay, nguoimua,mahang,soluong, giaban) values('2012/10/23','khoa','H1',3,5000)

2. To trigger, c kch hot khi ta tin hnh cp nht ct SOLUONG cho mt bn ghi ca bng NHATKYBANHANG (ch cp nht ng mt bn ghi)
create trigger trg_nhatkybanhang_update_soluong on nhatkybanhang for update AS if update(soluong) update mathang set mathang.soluong=mathang.soluong-(inserted.soluongdeleted.soluong) from mathang, inserted, deleted where deleted.stt=inserted.stt and mathang.mahang=deleted.mahang update nhatkybanhang set soluong=soluong+20 where stt=1

3. To trigger ngn chn mi thao tc lm thay i d liu


create trigger trg_mathang_delete on mathang for delete AS rollback transaction delete from mathang where mahang='H1'

Cho CSDL1 gm: CGTRINH (STT_CTR, TEN_CTR, DIACHI_CTR, KINH_PHI, TEN_CHU, TEN_THAU, NGAY_BD)

CHUNHAN (TEN_CHU, DCHI_CHU) CHUTHAU (TEN_THAU, TEL, DCHI_THAU) CONGNHAN (HOTEN_CN, NAMS_CN, NAM_VAO_N, CH_MON) KTRUCSU (HOTEN_KTS, NAMS_KTS, PHAI, NOI_TN, DCHI_LL_KTS) TAM (HOTEN_CN, TongSoNgay) THAMGIA (HOTEN_CN, STT_CTR, NGAY_TGIA, SO_NGAY) THIETKE (HOTEN_KTS, STT_CTR, THU_LAO) 1. To cc th tc thm, cp nht, xa mt cng trnh trong bng CGTRINH. Trng hp cp nht v xa l theo STT_CTR.
--tao thu tuc de them vao bang CGTRINH create procedure CGTRINH_Add @STT_CTR as tinyint, @TEN_CTR as nvarchar(20), @DIACHI_CTR as nvarchar(20), @TINH_THANH as nvarchar(15), @KINH_PHI as int, @TEN_CHU as nvarchar(20), @TEN_THAU as nvarchar(20) AS INSERT INTO CGTRINH(STT_CTR, TEN_CTR, DIACHI_CTR, TINH_THANH, KINH_PHI, TEN_CHU, TEN_THAU, NGAY_BD) VALUES (@STT_CTR, @TEN_CTR, @DIACHI_CTR, @TINH_THANH, @KINH_PHI, @TEN_CHU, @TEN_THAU, Getdate()) drop procedure CGTRINH_Add --tao thu tuc de cap nhat vao bang CGTRINH create procedure CGTRINH_Update @STT_CTR as tinyint, @TEN_CTR as nvarchar(20), @DIACHI_CTR as nvarchar(20), @TINH_THANH as nvarchar(15), @KINH_PHI as int, @TEN_CHU as nvarchar(20), @TEN_THAU as nvarchar(20), @NGAY_BD as smalldatetime AS UPDATE CGTRINH SET TEN_CTR=@TEN_CTR, DIACHI_CTR=@DIACHI_CTR, TINH_THANH=@TINH_THANH, KINH_PHI=@KINH_PHI, TEN_CHU=@TEN_CHU, TEN_THAU=@TEN_THAU, NGAY_BD=@NGAY_BD WHERE STT_CTR=@STT_CTR --tao thu tuc de xoa vao bang CGTRINH create procedure CGTRINH_Delete @STT_CTR as tinyint AS DELETE CGTRINH WHERE STT_CTR=@STT_CTR CGTRINH_Add 9,'ks Ninh Kieu 2','dai lo hoa binh','can tho','5000','so thuong mai du lich','phong dich vu du lich'

CGTRINH_Update 9,'ks Ninh Kieu 2','dai lo hoa binh','can tho','5000','so thuong mai du lich','phong dich vu du lich','2009/10/2' CGTRINH_Delete 9

Cu 1: 1.1 To th tc CheckGender c tham s l tn. Th tc s kim tra tip u ng ca tn l Ms. hay Mr.. Nu bt u l Ms. hin th thng bo Bn nhp vo tn mt ph n . Nu bt u l Mr., hin th thng bo Bn nhp vo tn mt n ng. 1.2 Thc thi th tc CheckGender vi tham s l chui Ms. Olive Oyl.
create procedure CheckGender @ten as nvarchar(20) AS if(left(@ten,3)='Ms.') print 'Ban da nhap ten 1 phu nu' else if(left(@ten,3)='Mr.') print 'Ban nhap vao ten 1 dan ong' CheckGender 'Ms. Olive oyl'

Cho CSDL pubs gm:


Authors (au_id, au_lname, au_fname, phone, address, city, state, zip, contract) Discounts (discounttype, stor_id, lowqty, highqty, discount) Employee (emp_id, fname, minit, lname, job_id, job_lvl, pub_id, hire_date) Jobs (job_id, job_desc, min_lvl, max_lvl) pub_info (pub_id, logo, pr_info) publishers (pub_id, pub_name, city, state, country) roysched (title_id, lorange, hirange, royalty) sales (stor_id, ord_num, ord_date, qty, payterms, title_id) stores (stor_id, stor_name, stor_address, city, state, zip) titleauthor (au_id, title_id, au_ord, royaltyper) titles (title_id, title, type, pub_id, price, advance, royalty, ytd_sales, notes, pubdate)

Cu 2: S dng c s d liu pubs. 2.1 Vit cu lnh T-SQL thay th 3 k t u tin ca ct Titleid t bng Titles bng ABB vi iu kin kiu (type) l business.
DECLARE @var_title_id as nvarchar(40) DECLARE @var_title_id_thay_the as nvarchar(40) DECLARE Type_Cursor CURSOR FOR SELECT title_id FROM titles WHERE type='business' OPEN Type_Cursor FETCH NEXT FROM Type_Cursor INTO @var_title_id WHILE @@FETCH_STATUS = 0 BEGIN -- PRINT 'Author:' + @var_title_id set @var_title_id_thay_the=replace(@var_title_id,left(@var_title_id,3),'M')

title=@var_title_id_thay_the title_id=@var_title_id @var_title_id END CLOSE Type_Cursor DEALLOCATE Type_Cursor update titles set title_id='1' where title_id='TC7777'

update titles set where FETCH NEXT FROM Type_Cursor INTO

select replace('MNB mbnv cnc',left('MNB mbnv cnc',3),'ABB')

2.2 Vit cu lnh T-SQL hin th cc tn cc nh xut bn khc nhau bng ch thng.
DECLARE @var_pub_name as nvarchar(40) DECLARE Pub_name_Cursor CURSOR FOR SELECT pub_name FROM publishers OPEN Pub_name_Cursor FETCH NEXT FROM Pub_name_Cursor INTO @var_pub_name WHILE @@FETCH_STATUS = 0 BEGIN PRINT 'Ten nha xuat ban '+LOWER(@var_pub_name) FETCH NEXT FROM Pub_name_Cursor INTO @var_pub_name END CLOSE Pub_name_Cursor DEALLOCATE Pub_name_Cursor

2.3 To trigger Royalty_Per_Update khng cho php cp nht ct royaltyper ca bng titleauthor.
create trigger Royalty_Per_Update--ten trigger on titleauthor--bang for update AS If update(royaltyper) rollback transaction update titleauthor set royaltyper=100 where au_id='172-32-1176' and title_id='PS3333' drop trigger Royalty_Per_Update insert into titleauthor values('172-32-1176', 'TC7777', 1, 80) delete titleauthor where au_id='172-32-1176' and title_id='TC7777'

Cu 3: S dng c s d liu CSDL7. 3.1 To hm TongBan c tham s l m mt hng tr v tng s lng hng bn c

ca mi mt hng.
create function TongBan (@var_ma_mat_hang nvarchar(20)) returns table AS return( select nhatkybanhang.mahang,mathang.tenhang, sum(nhatkybanhang.soluong) as TongSoLuongBan FROM mathang,nhatkybanhang WHERE mathang.mahang=@var_ma_mat_hang and mathang.mahang=nhatkybanhang.mahang GROUP BY nhatkybanhang.mahang,mathang.tenhang ) drop function TongBan select * from TongBan ('H1')

3.2 To th tc ThongKe c chc nng thng k tng s lng hng bn c ca mi mt hng.


create procedure ThongKe AS select nhatkybanhang.mahang,mathang.tenhang, sum(nhatkybanhang.soluong) as TongSoLuongBan FROM mathang,nhatkybanhang WHERE mathang.mahang=nhatkybanhang.mahang GROUP BY nhatkybanhang.mahang,mathang.tenhang ThongKe

3.3 To trigger InsertOnNKBH c kch hot khi cu lnh INSERT c s dng b sung mt bn ghi mi cho bng NHATKYBANHANG. Trong trigger ny kim tra iu kin hp l ca d liu l s lng hng bn ra phi nh hn hoc bng s lng hng hin c. Nu iu kin ny khng tho mn th hu b thao tc b sung d liu.
create trigger trg_nhatkybanhang_update_soluong on nhatkybanhang for update AS if update(soluong) update mathang set mathang.soluong=mathang.soluong-(inserted.soluongdeleted.soluong) from mathang, inserted, deleted where deleted.stt=inserted.stt and mathang.mahang=deleted.mahang update nhatkybanhang set soluong=soluong+20 where stt=1 --roi toi trigger nay --ai biet create trigger InsertOnNKBH on nhatkybanhang for insert AS

declare @var_so_luong_ban int declare @var_ma_hang nvarchar(5) declare @var_so_luong_ton int set @var_so_luong_ban=(select soluong from inserted) set @var_ma_hang=(select mahang from inserted) set @var_so_luong_ton=(select sum(soluong) from mathang where mathang.mahang=@var_ma_hang) if(@var_so_luong_ton<0) begin print 'khong duoc' --print @var_so_luong_ton --print @var_ma_hang --print @var_so_luong_ban rollback transaction end else print 'ok' drop trigger InsertOnNKBH insert into nhatkybanhang(ngay, nguoimua,mahang,soluong, giaban) values('2012/10/3','khoa','H1',20,5000)

Cho CSDL5 gm: CHUCDANH (MACD, TENCD, GIOCHUAN, TIEN_1TIET) Gd_0506 (MAGV, MONDAY, LOPDAY, SOTIET, SISO) GIAOVIEN (MAGV, HOTEN, MACD, PHAI) TAMUNG (MAGV, NGAY_TA, SOTIEN) 4.1 Vit th tc GoiTen nhn vo tham s m gio vin. Hy in ra tn ca gio vin cng vi danh xng l 'Thy' nu gio vin l nam, v 'C' nu gio vin l n.
create procedure GoiTen @ten as nvarchar(20) AS declare @var_phai as bit declare @var_magv as char(5) declare @var_hoten as nvarchar(25) declare Magv_Cursor cursor for select giaovien.magv, giaovien.phai, giaovien.hoten from giaovien where giaovien.hoten like '%'+@ten+'%' open Magv_Cursor FETCH NEXT FROM Magv_Cursor INTO @var_magv, @var_phai, @var_hoten while @@fetch_status=0 begin if(@var_phai=0) Print 'Thay '+@var_hoten else Print 'Co '+@var_hoten FETCH NEXT FROM Magv_Cursor INTO @var_magv, @var_phai, @var_hoten end close Magv_Cursor deallocate Magv_Cursor drop procedure GoiTen

GoiTen 'Binh'

4.2 Vit hm TienTamUng nhn vo tham s m gio vin, hm s tr v tng s tin tm ng.
create function TienTamUng (@var_magv nvarchar(4)) returns table AS return( select tamung.magv,sum(tamung.sotien) as Tongtientamung FROM tamung where tamung.magv=@var_magv GROUP BY tamung.magv ) drop function TienTamUng select * from TienTamUng ('CT00') select * from tamung where magv='ct00'

4.3 Vit hm TongGioChuan nhn vo tham s tn lp dy, hm s tr v tng s tit chun m cc gio vin dy lp ging dy.
create function TongGioChuan (@var_lop_day nvarchar(15)) returns table AS return( select gd_0506.lopday, sum(gd_0506.sotiet) as Tongtietday from gd_0506 where gd_0506.lopday=@var_lop_day group by gd_0506.lopday ) drop function TongGioChuan select * from TongGioChuan ('DT18') select * from gd_0506 where lopday='DT18'

4.4 Vit hm TamUngCN tr v h tn ca gio vin c tm ng nhiu nht t trc n nay.


create function TamUngCN () returns @bang table ( magv char(5), hoten nvarchar(25), tamung float ) AS begin declare @var_magv as char(5) declare @var_sotien as float declare @var_hoten as nvarchar(25) declare @var_tien_cao_nhat as float declare @var_magv_cao_nhat as char(5) declare @var_hoten_cao_nhat as nvarchar(25)

set @var_tien_cao_nhat=0 declare Tamung_Cursor cursor for select tamung.magv, sum(tamung.sotien) as tongtienTU, giaovien.hoten from tamung, giaovien where giaovien.magv=tamung.magv group by tamung.magv,giaovien.hoten open Tamung_Cursor FETCH NEXT FROM Tamung_Cursor INTO @var_magv, @var_sotien, @var_hoten while @@fetch_status=0 begin if(@var_sotien>@var_tien_cao_nhat) begin set @var_tien_cao_nhat=@var_sotien set @var_magv_cao_nhat=@var_magv set @var_hoten_cao_nhat=@var_hoten end FETCH NEXT FROM Tamung_Cursor INTO @var_magv, @var_sotien, @var_hoten end close Tamung_Cursor deallocate Tamung_Cursor --return (@var_tien_cao_nhat) insert into @bang (magv,hoten,tamung) values(@var_magv_cao_nhat, @var_hoten_cao_nhat, @var_tien_cao_nhat) return end

drop function TamUngCN select * from TamUngCN () -- 'tamung' select * from tamung where magv='ct00'

4.5 Vit hm NgayTamUngGanNhat tr v ngy c gio vin tm ng gn y nht.


create function NgayTamUngGanNhat () returns table AS return( select max(tamung.ngay_ta) as NgayTamUngGanNhat from tamung ) drop function NgayTamUngGanNhat select * from NgayTamUngGanNhat ()

4.6 Vit th tc GVDay_Mon nhn vo tham s tn mn dy, th tc in ra mn hnh h tn gio vin tng dy mn . (xng danh Thy, hoc C).
create procedure GVDay_Mon @var_ten_mon_day as nvarchar(20)

AS

declare @var_phai as bit declare @var_magv as char(5) declare @var_hoten as nvarchar(25) declare @var_monday as nvarchar(20) declare Magv_Cursor cursor for select distinct giaovien.magv, giaovien.phai, giaovien.hoten, gd_0506.monday from giaovien, gd_0506 where giaovien.magv=gd_0506.magv and gd_0506.monday = @var_ten_mon_day open Magv_Cursor FETCH NEXT FROM Magv_Cursor INTO @var_magv, @var_phai, @var_hoten, @var_monday while @@fetch_status=0 begin if(@var_phai=0) begin Print 'Thay '+@var_hoten Print 'Mon ' +@var_monday end else begin Print 'Co '+@var_hoten Print 'Mon ' +@var_monday end FETCH NEXT FROM Magv_Cursor INTO @var_magv, @var_phai, @var_hoten, @var_monday end close Magv_Cursor deallocate Magv_Cursor drop procedure GVDay_Mon GVDay_Mon 'CT Du Lieu'

4.7 Vit th tc TongGioCDanh nhn vo tham s tn chc danh, th tc in ra h tn GV cng vi tng s gi qui chun ca tng gio vin thuc chc danh .

create procedure TongGioCD @var_ten_chuc_danh as nvarchar(20) AS declare @var_giochuan as int declare @var_phai as bit declare @var_hoten as nvarchar(25) declare @var_tencd as nvarchar(20) declare Magv_Cursor cursor for select distinct chucdanh.tencd, chucdanh.giochuan, giaovien.hoten, giaovien.phai from giaovien, chucdanh where giaovien.macd=chucdanh.macd and chucdanh.tencd = @var_ten_chuc_danh open Magv_Cursor FETCH NEXT FROM Magv_Cursor INTO @var_tencd, @var_giochuan, @var_hoten, @var_phai while @@fetch_status=0 begin if(@var_phai=0) begin

Print 'Thay '+@var_hoten Print 'Chuc Danh ' +@var_tencd Print 'Gio Chuan ' print @var_giochuan--chu y end begin Print 'Co '+@var_hoten Print 'Chuc Danh ' +@var_tencd Print 'Gio Chuan ' print @var_giochuan--chu y end FETCH NEXT FROM Magv_Cursor INTO @var_tencd, @var_giochuan, @var_hoten, @var_phai end close Magv_Cursor deallocate Magv_Cursor drop procedure TongGioCD TongGioCD 'GV Chinh' else

N T P Cho CSDL: LOAIHANG(MALOAIHANG, TENLOAIHANG) MATHANG(MAHANG, TENHANG, MACONGTY, MALOAIHANG, SOLUONG, DONVITINH, GIAHANG) KHACHHANG(MAKHACHHANG, TENCONGTY, TENGIAODICH, DIACHI, EMAIL, DIENTHOAI, FAX) NHACUNGCAP(MACONGTY, TENCONGTY, TENGIAODICH, DIACHI, DIENTHOAI, FAX, EMAIL) NHANVIEN(MANHANVIEN, HO, TEN, NGAYSINH, NGAYLAMVIEC, DIACHI, DIENTHOAI, LUONGCOBAN, PHUCAP) DONDATHANG(SOHOADON, MAKHACHHANG, MANHANVIEN, NGAYDATHANG, NGAYGIAOHANG, NGAYCHUYENHANG, NOIGIAOHANG) CHITIETDATHANG(SOHOADON, MAHANG, GIABAN, SOLUONG, MUCGIAMGIA) 1. Cho bit danh sch cc i tc cung cp hng cho cng ty.
select * from nhacungcap

2. M hng, tn hng, s lng ca cc mt hng c trong cng ty

select mathang.mahang, mathang.tenhang, mathang.soluong from mathang]

3. Cho bit lng cng ty phi tr cho mi nhn vin (lng = lng c bn + ph cp)
create procedure Tienphaitra AS declare @var_manhanvien as char(10) declare @var_ho as nvarchar(50) declare @var_ten as nvarchar(50) declare @var_luongcoban as money declare @var_phucap as money

declare @var_luongduoctra as money declare tienluong_Cursor cursor for select distinct nhanvien.manhanvien, nhanvien.ho,nhanvien.ten,nhanvien.luongcoban,nhanvien.phucap from nhanvien open tienluong_Cursor FETCH NEXT FROM tienluong_Cursor INTO @var_manhanvien, @var_ho, @var_ten, @var_luongcoban, @var_phucap while @@fetch_status=0 begin set @var_luongduoctra=@var_luongcoban+@var_phucap print 'MaNV '+@var_manhanvien+', ho '+@var_ho+', ten '+@var_ten+', luong duoc tra '+cast(@var_luongduoctra as nvarchar(50)) FETCH NEXT FROM tienluong_Cursor INTO @var_manhanvien, @var_ho, @var_ten, @var_luongcoban, @var_phucap end close tienluong_Cursor deallocate tienluong_Cursor drop procedure Tienphaitra --tim nhung nhan vien co cung ngay sinh create procedure cungngaysinh AS declare @var_ngaysinh as datetime declare @var_tong as int declare @var_ten as nvarchar(50) declare @var_luongcoban as money declare @var_phucap as money declare @var_luongduoctra as money declare ngaysinh_Cursor cursor for select distinct nhanvien.ngaysinh, count(nhanvien.ngaysinh) as tong from nhanvien group by nhanvien.ngaysinh open ngaysinh_Cursor FETCH NEXT FROM ngaysinh_Cursor INTO @var_ngaysinh,@var_tong while @@fetch_status=0 begin if(@var_tong>1) begin select * from nhanvien where nhanvien.ngaysinh=@var_ngaysinh end FETCH NEXT FROM ngaysinh_Cursor INTO @var_ngaysinh,@var_tong end close ngaysinh_Cursor deallocate ngaysinh_Cursor drop procedure cungngaysinh

--nhung mat hang chua tung duoc khach hang dat mua select * from mathang where mathang.mahang not in

(select distinct chitietdathang.mahang from chitietdathang)

--NHUNG NHAN VIEN CHUA TUNG LaP DON DAT HANG select * from nhanvien where nhanvien.manhanvien not in (select distinct dondathang.manhanvien from dondathang)

--nhung nhan vien cua cong ty co luong co ban cao nhat select * from nhanvien where nhanvien.luongcoban= (select max(nhanvien.luongcoban) from nhanvien) -- thong ke trong nam 2011, moi mat hang trong moi thang --va ca nam ban duoc bao nhieu create procedure thongke_thang_nam as declare @var_mahang as char(10) declare @var_tenhang as nvarchar(50) declare @var_thang as int declare @var_nam as int declare @var_tongsoluong as int declare @var_tonggiaban as money declare @var_tonggiabannam as money declare @var_tongsoluongnam as int declare thongke_cursor cursor for select mathang.mahang, mathang.tenhang, month(dondathang.ngaydathang) as thang, year(dondathang.ngaydathang) as nam, sum(chitietdathang.soluong) as tongsoluong, sum(chitietdathang.giaban) as tonggiaban from mathang,chitietdathang,dondathang where mathang.mahang=chitietdathang.mahang and chitietdathang.sohoadon=dondathang.sohoadon and year(dondathang.ngaydathang)=2011 group by mathang.mahang,mathang.tenhang, month(dondathang.ngaydathang),year(dondathang.ngaydathang) set @var_tongsoluongnam=0 set @var_tonggiabannam=0 open thongke_cursor fetch next from thongke_cursor into @var_mahang,@var_tenhang,@var_thang,@var_nam,@var_tongsoluong,@var_tong giaban while @@fetch_status=0 begin print 'Mahang '+@var_mahang+', Tenhang '+@var_tenhang+', thang '+cast(@var_thang as nvarchar(20))+', nam '+cast(@var_nam as nvarchar(20))+', Soluong '+cast(@var_tongsoluong as nvarchar(50))+', giaban '+cast(@var_tonggiaban as nvarchar(50)) set @var_tonggiabannam=@var_tonggiabannam+@var_tonggiaban set @var_tongsoluongnam=@var_tongsoluongnam+@var_tongsoluong fetch next from thongke_cursor into @var_mahang,@var_tenhang,@var_thang,@var_nam,@var_tongsoluong,@var_tong giaban end

print 'Tong so luong ban trong nam: '+cast(@var_tongsoluongnam as nvarchar(50))+', Tong gia ban trong nam: '+cast(@var_tonggiabannam as nvarchar(50)) close thongke_cursor deallocate thongke_cursor drop procedure thongke_thang_nam --update --tang so luong hang cua nhung mat hang do vinamilk cung cap --len gap doi update mathang set mathang.soluong=(mathang.soluong*2) where mathang.macongty=( select nhacungcap.macongty from nhacungcap where nhacungcap.tencongty='VINAMILK' ) -- tang luong len gap ruoi cho nhung nhan vien ban duoc hang --soluong tren 100 va trong nam 2011 update nhanvien set nhanvien.luongcoban=(nhanvien.luongcoban*1.5) where nhanvien.manhanvien=( select dondathang.manhanvien from dondathang, chitietdathang where dondathang.sohoadon=chitietdathang.sohoadon and year(dondathang.ngaydathang)=2011 group by dondathang.manhanvien having sum(chitietdathang.soluong)>100 ) -- tang phu cap len bang 50% luong cho nhung --nhan vien ban duoc nhieu hang nhat delete tam drop table tam select dondathang.manhanvien, sum(chitietdathang.soluong) as tongsoluong into tam from dondathang, chitietdathang where dondathang.sohoadon=chitietdathang.sohoadon group by dondathang.manhanvien update nhanvien set nhanvien.phucap=(nhanvien.luongcoban*0.5) where nhanvien.manhanvien= ( select tam.manhanvien from tam where tam.tongsoluong=(select max(tam.tongsoluong) from tam) ) create function soluonglonnhat() returns @bang table( soluongmax int, manhanvienmax char(10) ) as

begin

declare @var_manhanvien as char(10) declare @var_manhanvienmax as char(10) declare @var_soluong as int declare @var_soluongmax as int declare soluong_cursor cursor for select dondathang.manhanvien, sum(chitietdathang.soluong) as tongsoluong from dondathang, chitietdathang where dondathang.sohoadon=chitietdathang.sohoadon group by dondathang.manhanvien set @var_soluongmax=0 open soluong_cursor fetch next from soluong_cursor into @var_manhanvien,@var_soluong while @@fetch_status=0 begin if(@var_soluongmax<@var_soluong) begin set @var_soluongmax=@var_soluong set @var_manhanvienmax=@var_manhanvien end fetch next from soluong_cursor into @var_manhanvien,@var_soluong end close soluong_cursor deallocate soluong_cursor insert into @bang(soluongmax,manhanvienmax) values (@var_soluongmax,@var_manhanvienmax) return end update nhanvien set nhanvien.phucap=(nhanvien.luongcoban*0.5) where nhanvien.manhanvien=( select manhanvienmax from soluonglonnhat() ) create function soluonglonnhat() returns char(10) as begin declare @var_manhanvien as char(10) declare @var_manhanvienmax as char(10) declare @var_soluong as int declare @var_soluongmax as int declare soluong_cursor cursor for select dondathang.manhanvien, sum(chitietdathang.soluong) as tongsoluong from dondathang, chitietdathang where dondathang.sohoadon=chitietdathang.sohoadon group by dondathang.manhanvien set @var_soluongmax=0 open soluong_cursor fetch next from soluong_cursor into @var_manhanvien,@var_soluong while @@fetch_status=0 begin if(@var_soluongmax<@var_soluong)

begin set @var_soluongmax=@var_soluong set @var_manhanvienmax=@var_manhanvien end fetch next from soluong_cursor into @var_manhanvien,@var_soluong end close soluong_cursor deallocate soluong_cursor return @var_manhanvienmax end drop function soluonglonnhat select dbo.soluonglonnhat() as '# soluong' update nhanvien set nhanvien.phucap=(nhanvien.luongcoban*0.5) where nhanvien.manhanvien=( select dbo.soluonglonnhat() ) --delete --13 xoa khoi bang mat hang nhung mat hang co so luong bang 0 --va khong duoc dat mua trong bat ki don dat hang nao SELECT DISTINCT chitietdathang.mahang from chitietdathang delete mathang where mathang.soluong=0 or mathang.mahang not in ( select distinct chitietdathang.mahang from chitietdathang ) --THU TUC -- tao thu tuc thong ke tong so luong hang ban duoc --cua mot mat hang co ma bat ki --ma mat hang can thong ke la tham so cua thu tuc create procedure tongsoluong_mahang @mahang as char(10) as select chitietdathang.mahang, sum(chitietdathang.soluong) as soluongbanduoc from chitietdathang where chitietdathang.mahang=@mahang group by chitietdathang.mahang drop procedure tongsoluong_mahang 'H2' -- viet ham tra ve mot bang trong do cho biet --tong so luong hang ban duoc cua moi mat hang --thong ke xem so luong hang hien co va da ban --cua moi mat hang la bao nhieu create function thongke_soluong_hienco_daban() returns table as return (

select mathang.mahang, mathang.tenhang, mathang.soluong as soluonghienco, sum(chitietdathang.soluong) as soluongdaban from mathang,chitietdathang where mathang.mahang=chitietdathang.mahang group by mathang.mahang, mathang.tenhang, mathang.soluong ) --khong duoc sum(mathang.soluong) drop function thongke_soluong_hienco_daban select * from thongke_soluong_hienco_daban() --TRIGGER --viet trigger cho bang chitietdathang --sao cho chi chap nhan gia ban ra nho hon hoac bang gia goc --(gia cua mat hang trong bang mat hang) create trigger chitietdathang_update on chitietdathang for insert as declare @var_giaban as money declare @var_giahang as money declare @var_mahang as char(10) set @var_mahang=(select inserted.mahang from inserted) set @var_giaban=(select inserted.giaban from inserted) set @var_giahang=(select mathang.giahang from mathang where mathang.mahang=@var_mahang) if(@var_giaban>@var_giahang) begin print 'khog duoc' rollback transaction end else begin print 'ok' end drop trigger chitietdathang_update insert into chitietdathang(sohoadon, mahang, giaban, soluong, mucgiamgia) values('HD9', 'H1', 3000,2,0)

You might also like