You are on page 1of 9

Xy dng th tc tnh s lng hng cn phi nhp vi tn spud_TinhSLConNhap gm 2 tham s vo l: S t hng v M vt t create proc spud_TinhSLConNhap @sodathang char(4), @mavattu

char(4) as declare @soluongconnhap int select @soluongconnhap = sum(SLDAT)- sum(SLNHAP) from CTPNHAP A inner join CTDONDH B on A.MAVTU = B.MAVTU where (@sodathang = SODH) and (@mavattu = A.MAVTU ) print @soluongconnhap -----------------------------------------------exec spud_TinhSLConNhap 'D006', 'TV14' Xy dng hm tn Fn_Giam_DGX(@PhanTramGiam, @MucGiam) tr v danh sch cc chi tit xut ca cc vt t c s lng xut >= @MucGiam v ct n gi xut gim theo @PhanTramGiam. Cng thc: n gi gim = n gi - n gi * @PhanTramGiam/100 create function Fn_Giam_DGX (@phantramgiam int, @mucgiam int) returns @DSChiTietXuat table (SLXUAT int, DGX money) as begin insert into @DSChiTietXuat(SLXUAT, DGX) select SLXUAT, DGXUAT from ctpxuat where SLXUAT >= @mucgiam update @DSChiTietXuat set DGX = DGX - ((DGX * @phantramgiam)/100) return end ------------------------------------------select* from Fn_Giam_DGX (10, 2) Xy dng hm tn Fn_LietKeDDH_NCC(@Manhacc) tr v danh sch cc n t hng ca m nh cung cp truyn vo create function Fn_LietKeDDH_NCC (@mancc char(3)) returns table as return select SODH from nhacc a left join dondh b on a.manhacc = b.manhacc where a.manhacc = @mancc ---------------------------------------------------select* from Fn_LietKeDDH_NCC('C05') Xy dng th tc tnh s lng t hng nhp vi tn spud_TinhSLNhap gm 2 tham s vo l: S t hng v M vt t create proc spud_TinhSLNhap @sodathang char(4), @mavattu char(4) as declare @soluongdat int select @soluongdat = sum(SLDAT)

from CTPNHAP A right join CTDONDH B on A.MAVTU = B.MAVTU where (@sodathang = SODH) and (@mavattu = A.MAVTU ) print @soluongdat ----------------------------------------------------exec spud_TinhSLNhap 'D001', 'DD01' Xy dng th tc tnh s lng t hng vi tn spud_DONDH_TinhSLDat gm 2 tham s vo l: S t hng v M vt t, 1 tham s ra l: S lng t hng ca vt t c m bng vi m vt t truyn vo v s t hng bng vi s t hng truyn vo create proc spud_dondh_tinhsldat @sodathang char(4), @mavtu char(4), @soluongdat int output as select @soluongdat = sum(sldat) from ctdondh where sodh = @sodathang and mavtu = @mavtu return ----------------------------------------------------------declare @soluongdat int exec spud_dondh_tinhsldat 'D001', 'DD02',@soluongdat output print @soluongdat Xy dng th tc lit k cc ct d liu trong bng TONKHO c th hin thm ct TENVTU trong bng VATTU vi tn spud_TONKHO_BcaoTonkho gm c 1 tham s vo l: Nm thng mun lc d liu create proc spud_tonkho_baocaotonkho @namthang char(6) = null as set nocount on if @namthang is null begin select *, TENVTU from tonkho a inner join vattu b on a.mavtu = b.mavtu end else begin select *, TENVTU from tonkho a inner join vattu b on a.mavtu = b.mavtu where namthang = @namthang end ---------------------------------------------------exec spud_tonkho_baocaotonkho ---------------------------------------------------exec spud_tonkho_baocaotonkho '200601' Xy dng th tc tn spud_HienThi_DDH gm 1 tham s vo l: Nm thng (dng yyyymm). Th tc dng hin th danh sch cc thng tin trong bng DONDH c lc theo nm thng truyn vo v c thm ct ghi ch bit rng nu c nhp hng th in ra C x phiu nhp hng, ngc li nu cha c nhp hng th in ra Cha c nhp hng. create proc spud_HienThi_DDH @namthang char(6) as select a.SODH, NGAYDH, MANHACC, GHICHU = case when (count(sopn)<>0) then N'C ' + cast((count(sopn)) as varchar(3))+ N' phiu nhp hng'

else N'Cha c nhp hng' end from dondh a left join pnhap b on a.sodh = b.sodh where (ltrim(str(year(ngaydh))) + case when ((month(ngaydh)) < 10) then '0' +ltrim(str(month(ngaydh))) else ltrim(str(month(ngaydh))) end) = @namthang group by a.sodh, ngaydh, manhacc ---------------------------------------------exec spud_HienThi_DDH '200601' Xy dng th tc tnh s lng t hng vi tn spud_TinhSLDat gm 2 tham s vo l: S t hng v M vt t create proc spud_TinhSLDat @sodathang char(4), @mavattu char(4) as declare @soluongdathang int select @soluongdathang = sum(SLDAT) from CTDONDH where (@sodathang = SODH) and (@mavattu = MAVTU) print @soluongdathang ----------------------------------------------exec spud_TinhSLDat 'D002','VD02' Xy dng th tc tn spud_TinhTienNhap_200901 tnh tng thnh tin nhp ca cc phiu nhp trong thng 1/2009 create proc spud_TinhTienNhap_200901 as declare @tongthanhtien money select @tongthanhtien = sum(THANHTIEN) from PNHAP A inner join CTPNHAP B on A.SOPN = B.SOPN where convert(char(7), NGAYNHAP, 21) = '2009-01' print @tongthanhtien ---------------------------------------------exec spud_TinhTienNhap_200901 Xy dng hm tn Fn_LietKePN(@Sodh) tr v danh sch cc phiu nhp ca s t hng truyn vo create function Fn_LietKePN(@sodh char(4)) returns table as return select SOPN from dondh a left join pnhap b on a.sodh = b.sodh where a.sodh = @sodh ------------------------------------------------------select * from Fn_LietKePN('D001') Xy dng hm tn Fn_CacSoNT(@n) tr v chui cc s nguyn t nm trong khong t 2 n n. V d: --In ra cc s nguyn t t 2 n 10 DECLARE @Kq VARCHAR(1000) SET @Kq = dbo.Fn_CacSoNT(10) PRINT @Kq --In ra 2, 3, 5, 7 create function Fn_CacSoNT(@n int) returns varchar(1000) as

begin declare @kq varchar(1000), @i int, @a int set @i = 1 set @kq = '' while (@i <= @n) begin set @a = dbo.Fn_SoNT(@i) if (@a = 1) begin set @kq = @kq + cast(@i as varchar(4)) + ', ' set @i = @i + 1 end else set @i = @i + 1 end return (@kq) end -----------------------------------------print dbo.Fn_CacSoNT(100) Xy dng hm tn Fn_SoNT(@n) tr v 1 nu @n l s nguyn t, ngc li th tr v 0 create function Fn_SoNT(@n int) returns int as begin declare @i int, @du int, @kq int set @i = 2 while (@i <= @n) begin set @du = @n % @i if (@du = 0 and @n != 2) begin set @kq = 0 break end else begin set @i = @i + 1 if (@i = @n or @n = 2) begin set @kq = 1 break end end end return @kq end ----------------------------------print dbo.Fn_SoNT(3) Xy dng hm tn Fn_TongDaySo(@n) tr v tng ca cc s nguyn t 1 n n create function Fn_TongDaySo(@n int) returns int as

begin declare @kq int, @i int set @kq = 0 set @i = 1 while (@i < (@n + 1)) begin set @kq = @kq + @i set @i = @i + 1 end return @kq end -------------------------------print dbo.Fn_TongDaySo(3) Xy dng hm tn Fn_TongHaiSo(@So1, @So2) tr v tng ca hai s nguyn. V d: --In ra tng ca hai s nguyn 10 v 15 DECLARE @Kq INT SET @Kq = dbo.Fn_TongHaiSo(10,15) PRINT @Kq --In ra 25 create function Fn_TongHaiSo(@So1 int, @So2 int) returns int as begin declare @kq int set @kq = @So1 + @So2 return @kq end ----------------------------------------print dbo.Fn_TongHaiSo(10, 15) Xy dng th tc tn spud_DemVT_Bo m cc vt t c n v tnh l B create proc spud_DemDVT_Bo @ddvtinh nvarchar(10) as declare @sum int select @sum = count(DVTINH) from vattu where DVTINH = @ddvtinh print N'Tng s vt t c n v tnh l ' + @ddvtinh + ' = ' +cast(@sum as varchar(4)) -------------------------------------exec spud_DemDVT_Bo N'B' Xy dng th tc in ra bng cu chng n vi tn spud_InBangCC gm 1 tham s vo l: n. Vi n l s nguyn v n thuc khong [2,10] create proc spud_BangCC @n int as declare @i int, @kq int set @i = 1 while (@i < 11) begin set @kq = @n * @i print cast(@n as char(2)) + 'x ' + cast(@i as char(2)) + ' = ' + cast(@kq as char(2)) set @i = @i + 1 end

---------------------------------------------exec spud_BangCC 5 Xy dng th tc gii phng trnh bc nht (ax + b = 0) vi tn pud_GiaiPTBac1 gm 2 tham s vo l: a v b create proc pud_GiaiPTBac1 @a real, @b real as declare @x real if (@a = 0) begin if (@b = 0) print N'Phng trnh v s nghim' else print N'Phng trnh v nghim' end else begin if (@b = 0) print N'Phng trnh c nghim x = 0' else begin set @x = ((-@b)/@a) print N'Phng trnh c nghim x = '+ cast(@x as varchar(10)) end end -------------------------------------------exec pud_GiaiPTBac1 1,0 Xy dng th tc ni ti tnh tng hai s nguyn vi tn spud_TongHaiSo gm 2 tham s vo l: S 1 v S 2. S dng cu lnh PRINT in kt qu tnh c create proc spud_TongHaiSo @sothunhat int, @sothuhai int as declare @sum int set @sum = @sothunhat + @sothuhai print N'Tng ' + cast(@sothunhat as varchar(2)) + ' + ' + cast(@sothuhai as varchar(2))+ ' = '+ cast(@sum as char(3)) --------------------------------Goi thu tuc exec spud_TongHaiSo 7,8 BI TP SQL QLBANHANG (fn_namthang) create function fn_namthang (@ntn datetime) returns char(7)as begin declare @nt char(7) set @nt = ltrim(str(year(@ntn))) + '-' + case when month(@ntn) < 10 then '0' + ltrim(str(month(@ntn ))) else ltrim(str(month(@ntn ))) end return @nt end S dng cng c Enterprise Manager to cu trc bng VATTU (s dng cng c Query Analyzer vit lnh CREATE TABLE cho cc bng cn li trong CSDL QLBanHang) create table vattu ( mavtu char(4), tenvtu nvarchar(100), dvtinh nvarchar(10), phantram real,

primary key (mavtu) ) --------------------------------create table nhacc ( manhacc char(4), tennhacc nvarchar(100), diachi nvarchar(200), dienthoai nvarchar(20), primary key (manhacc) ) --------------------------------create table dondh ( sodh char(4), ngaydh datetime, manhacc char(4), primary key (sodh), foreign key (manhacc) references nhacc(manhacc) ) --------------------------------create table ctdondh ( sodh char(4), mavtu char(4), sldat int primary key (sodh, mavtu), foreign key (sodh) references dondh(sodh), foreign key (mavtu) references vattu(mavtu) ) --------------------------------create table pnhap ( sopn char(4), ngaynhap datetime, sodh char(4), primary key (sopn), foreign key (sodh) references dondh(sodh) ) --------------------------------create table ctpnhap ( sopn char(4), mavtu char(4), slnhap int, dgnhap money, primary key (sopn, mavtu), foreign key (sopn) references pnhap(sopn), foreign key (mavtu) references vattu(mavtu) ) --------------------------------create table pxuat (

sopx char(4), ngayxuat datetime, tenkh nvarchar(100), primary key (sopx) ) --------------------------------create table ctpxuat ( sopx char(4), mavtu char(4), slxuat int, dgxuat money, primary key (sopx, mavtu), foreign key (sopx) references pxuat(sopx), foreign key (mavtu) references vattu(mavtu) ) --------------------------------create table tonkho ( namthang char(6), mavtu char(4), sldau int, tongslnhap int, tongslxuat int, slcuoi int, primary key (namthang, mavtu), foreign key (mavtu) references vattu(mavtu) ) Bng cng c Enterprise Manager (hoc lnh SQL), to mi CSDL c tn QLBanHang (Qun l bn hng) c kch thc c m t nh sau: a. Data File : kch thc to lp 50MB, mi ln tng 10MB, gii hn kch thc tp tin khng tng hn 200MB. b. Log File : kch thc to lp 10MB, mi ln tng 5MB, khng gii hn vic kch thc tp tin. create database qlbanhang on primary ( name = 'qlbanhang1', filename = 'e:\qlbanhang\qlbanhang.mdf', size = 50, maxsize = 200, filegrowth = 10 ) log on ( name = 'qlbanhang2', filename = 'e:\qlbanhang\qlbanhang.ldf', size = 10, filegrowth = 5 ) Vit lnh INSERT INTO SELECT thm cc mu tin mi vo trong bng TONKHO tng ng vi nm thng 200603 v SLDAU chnh l SLCUOI ca nm thng 200602 (kt chuyn s d sang k sau) insert into tonkho (namthang, mavtu, sldau) select '200603', mavtu, slcuoi as sldau

from tonkho where namthang = '200602'

You might also like