You are on page 1of 17

I.To CSDL 1.

To cu trc bng v cc rng buc kha chnh, kha ngoi Tn ct MaVTu TenVTu DVTinh PhanTram Tn ct MaNhaCc TenNhaCC DiaChi DienThoai Tn ct SoDh NgayDH MaNhaCC Tn ct SoDh MaVTu SLDat Tn ct SoPN NgayNhap SoDH Tn ct SoPN MaVTu SLNhap DGNhap Danh mc Vt t (VATTU) ngha Kiu M vt t Char Tn vt t Nvarchar n v tnh Nvarchar T l phn trm Real Danh mc Nh cung cp (NHACC) ngha Kiu M nh cung cp Char Tn nh cung cp Nvarchar a ch Nvarchar in thoi Varchar n t hng (DONDH) ngha Kiu S n t hng Char Ngy t hng Datetime M nh cung cp Char Chi tit n t hng (CTDONDH) ngha Kiu S n t hng Char M vt t Char S lng t hng Int Phiu nhp hng (PNHAP) ngha Kiu S phiu nhp Char hng Ngy nhp hng Datetime S n t hng Char Chi tit nhp hng ( CTPNHAP) ngha Kiu S phiu nhp Char hng M vt t Char S lng nhp Int hng n gi nhp Money rng 4 100 10

rng 3 100 200 20 rng 4 3 rng 4 4

rng 4 4 rng 4 4

hng Tn ct SoPX NgayXuat TenKH Tn ct SoPX MaVTu SLXuat DGXuat Phiu xut hng (PXUAT) ngha Kiu S phiu xut Char hng Ngy xut hng Datetime Tn khch hng Nvarchar Chi tit xut hng (CTPXUAT) ngha Kiu S phiu xut Char hng M vt t Char S lng xut Int hng n gi xut hng Money rng 4 100 rng 4 4

Tn kho (TONKHO) Tn ct ngha Kiu rng NamThang Nm thng Char 6 MaVTu M vt t Char 4 SLDau S lng tn u Int k TongSLN Tng s lng Int nhp trong k TongSLX Tng s lng Int xut trong k SLCuoi S lng tn cui Int k Trong thuc tnh Formula ca ct SLCuoi: SLDau+TongSLN-TongSLX 2. Nhp d liu mu vo cc bng nh sau: MaNhaCC C01 C02 C03 C04 C05 Bng NHACC TenNhaCC DiaChi L Minh Tr 54 Hu Giang Q6 HCM Trn Minh Thch 145 Hng Vng M Tho Hng Phng 154/85 L Lai Q1 HCM Nht Thng 198/40 Hng L 14QTB HCM Lu Nguyt Qu 178 Nguyn Vn DienThoai 8781024 7698154 9600125 875757 7964251

C06

Cao Minh Trung

Lung Lt 125 L Quang Sung Lt

Cha c

MaVTu DD01 DD02 TL15 TL90 TV14 TV21 TV29 VD01 VD02

Bng VATTU TenVTu DVTinh u DVD Hitachi B 1 a u DVD Hitachi B 3 a T lnh Sanyo Ci 150 lt T lnh Sanyo 90 Ci lt Tivi Sony 14 Ci inches Tivi Sony 21 Ci inches Tivi Sony 29 Ci inches u VCD Sony 1 B a u VCD Sony 3 B a Bng DONDH NgayDH 01/15/2005 01/30/2005 02/10/2005 02/17/2005 03/01/2005 03/12/2005 Bng CTDONDH MaVTu DD01 DD02 VD02 TV14 TV29 TL90 TV14 TV29 TV14

PhanTram 40 40 25 20 15 10 10 30 30

SoDH D001 D002 D003 D004 D005 D006

MaNhaCC C03 C01 C02 C05 C02 C05

SoDH D001 D001 D002 D003 D003 D004 D005 D005 D006

SLDat 10 15 30 10 20 10 10 20 10

D006 D006 SoPN N001 N002 N003 N004 SoPN N001 N001 N002 N002 N003 N004 N004 SoPX X001 X002 X003 SoPX X001 X002 X002 X003 X003 X003 NamThang 200501 200501 200501 200502 200502 200502 200502 200502 MaVTu DD01 DD02 VD02 DD01 DD02 VD02 TV14 TV29

TV29 VD01 Bng PNHAP NgayNhap 01/17/2005 01/20/2005 01/31/2005 02/15/2005 Bng CTPNHAP MaVTu SLNhap DD01 8 DD02 10 DD01 2 DD02 5 VD02 30 TV14 5 TV29 12 Bng PXUAT NgayXuat 01/17/2005 01/25/2005 01/31/2005 Bng CTPXUAT MaVTu SLXuat DD01 2 DD01 1 DD02 5 DD01 3 DD02 2 VD02 10

20 20 SoDH D001 D001 D002 D003 DGNhap 2.500.000 3.500.000 2.500.000 3.500.000 2.500.000 2.500.000 3.500.000 TenKH Nguyn Thy Dng Nguyn Huy T Nguyn Tun T DGXuat 3.500.000 3.500.000 4.900.000 3.500.000 4.900.000 3.250.000 SLCuoi 4 8 20 4 8 20 5 12

Bng TONKHO SLDau TongSLDau TongSLCuoi 0 10 6 0 15 7 0 30 10 4 0 0 8 0 0 20 0 0 5 0 0 12 0 0

II. To cc truy vn sau:


1. Vit cu lnh gim 15% n gi nhp cho cc mt hng nhp vo ngy th t UPDATE CTPNHAP SET DGNhap=DGNhap-DGNhap*15/100 FROM PNHAP INNER JOIN CTPNHAP ON PNHAP.SoPN=CTPNHAP.SoPN WHERE NgayNhap IN (SELECT NgayNhap FROM PNHAP WHERE DATENAME(DW,NgayNhap)='Sunday') 2. Vit cu lnh xa i cc n t hng vo th hai , ca nhng nh cung cp TP.HCM DELETE FROM DONDH WHERE NgayDH IN (SELECT NgayDH FROM DONDH INNER JOIN NHACC ON DONDH.MaNhaCC=NHACC.MaNhaCC WHERE DATENAME(DW, NgayDH)='Monday' AND DiaChi LIKE '%HCM%')

3. Cho bit danh sch cc n t hng cha tng c nhp hng SELECT * FROM DONDH WHERE SoDH NOT IN ( SELECT SoDH FROM PNHAP) 4. Cho bit danh sch cc mt hng cha bao gi c t hng SELECT * FROM VATTU WHERE MaVTu NOT IN (SELECT MaVTu FROM CTDONDH) 5. Cho bit nh cung cp no c nhiu n t hng nht SELECT TOP 1 WITH TIES MaNhaCC, COUNT(*) AS TongSoDONDH FROM DONDH GROUP BY MaNhaCC ORDER BY TongSoDONDH DESC

6. Cho bit vt t no c tng s lng xut bn l ln nht

SELECT TOP 1 WITH TIES MaVTu, SUM(SLXuat) AS TongSLXuat FROM CTPXUAT GROUP BY MaVTu ORDER BY TongSLXuat DESC 7. Cho bit n t hng no c nhiu mt hng nht SELECT TOP 1 WITH TIES SoDH, COUNT(*) AS SoMatHang FROM CTDONDH GROUP BY SoDH ORDER BY SoMatHang DESC 8. Hin th cc thng tin trong bng CTPXUAT v b sung thm ct thnh tin, sao cho c thng k dng tng cng s tin tng phiu xut. SELECT * ,(SLXuat*DGXuat) AS ThanhTien FROM CTPXUAT ORDER BY SoPX COMPUTE SUM(SLXuat*DGXuat) BY SoPX 9. Hin th cc thng tin : m vt t , s nhp hng, s lng nhp, n gi nhp trong bng CTPNHAP v thng k dng tng cng s lng , gi thp nht, gi cao nht tng vt t. SELECT MaVTu, SoPN, SLNhap, DGNhap FROM CTPNHAP ORDER BY MaVTu COMPUTE SUM(SLNhap),MIN(DGNhap), MAX(DGNhap) BY MaVTu III. S dng c php IF, WHILE v CASE lng vo cc lnh truy vn cn thit trong cc yu cu sau: 1. Cho bit n gi xut trung bnh ca hng ha u DVD Hitachi 1 a trong bng CTPXUAT hin gi l bao nhiu? Nu ln hn 3.800.000 th in ra khng nn thay i gi bn, ngc li in ra n lc tng gi bn CCH 1:

DECLARE @DGTB REAL SELECT @DGTB = AVG(DGXuat) FROM CTPXUAT WHERE MaVTu IN (SELECT MaVTu FROM VATTU WHERE TenVTu = 'u DVD Hitachi 1 a') IF @DGTB > 3800000 PRINT N'Khng nn thay i gi bn' ELSE PRINT N' n lc tng gi bn'

CCH 2:

IF(SELECT AVG(DGXuat) FROM CTPXUAT WHERE MaVTu IN (SELECT MaVTu FROM VATTU WHERE TenVTu = 'u DVD Hitachi 1 a'))>3800000 PRINT N'Khng nn thay i gi bn' ELSE PRINT N' n lc tng gi bn' 2. S dng hm DATENAME tnh xem c n t hng no c lp vo ngy ch nht khng?Nu c th in ra danh sch cc n t hng , ngc li th in ra chui Ngy lp cc n hng u l hp l. DECLARE @DEM INT SELECT @DEM=COUNT(*) FROM DONDH WHERE DATENAME(DW, NgayDH)='Sunday' IF @DEM > 0 SELECT * FROM DONDH WHERE DATENAME(DW, NgayDH)='Sunday' ELSE PRINT N'Ngy lp cc n hng u l hp l' 3. Hy cho bit c bao nhiu phiu nhp hng cho n t hng D001, nu c th in ra C xx s phiu nhp hng cho n t hng D001, ngc li th in ra Cha c nhp hng no cho D001. DECLARE @DEM INT SELECT @DEM = COUNT (*) FROM PNHAP WHERE SoDH = 'D001' IF @DEM > 0 PRINT N'C' + CAST (@DEM AS CHAR(3)) + N's phiu nhp hng cho n t hng D001' ELSE PRINT N'Cha c nhp hng no cho D001' 4. To mt bng tn VATTU_Temp c cu trc v d liu da vo bng VATTU (ch ly 2 ct MaVTu, TenVTu). Sau s dng vng lp WHILE vit on chng trnh dng xa tng dng d liu trong bng VATTU_Temp vi iu kin cu lnh bn trong vng lp khi mi ln thc hin ch c php xa mt dng d liu trong bng VATTU_Temp. Trong khi xa nn thng bo ra mn hnh ni dung xa vt t + Tn vt t. SELECT MaVTu, TenVTu INTO VATTU_Temp FROM VATTU SET NOCOUNT ON DECLARE @MaVTu CHAR(4), @TenVTu VARCHAR(100) WHILE EXISTS ( SELECT * FROM VATTU_Temp) BEGIN SELECT TOP 1 @MaVTu=MaVTu, @TenVTu=TenVTu FROM VATTU_Temp DELETE VATTU_Temp WHERE @MaVTu=MaVTu PRINT N' xa vt t' + @TenVTu END SET NOCOUNT OFF

5. Lit k danh sch cc n t hng trong bng DONDH, b sung thm ct hin th th trong tun (bng ting vit) ca ngy t hng. SELECT *, Th_Ting_Vit = CASE DATENAME(DW,NgayDH) WHEN 'Sunday' THEN N'Ch Nht' WHEN 'Monday' THEN N'Th Hai' WHEN 'Tuesday' THEN N'Th Ba' WHEN 'Wednesday' THEN N'Th T' WHEN 'Thursday' THEN N'Th Nm' WHEN 'Friday' THEN N'Th Su' WHEN 'Saturday' THEN N'Th By' END FROM DONDH 6. Gim n gi xut ca cc hng ha bn ra trong thng 01/2007 theo cc quy tc sau: - Khng gim nu s lng < 4 - Gim 5 % nu s lng >= 4 v s lng < 10 - Gim 10 % nu s lng > = 10 v s lng < = 20 - Gim 20 % nu s lng > 20 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 MONTH(NgayXuat)='01' AND YEAR(NgayXuat)='2007')

IV. To cc VIEW sau:


1. To view c tn vw_DONDH_TongSLNhap bao gm cc thng tin sau: s t hng, tng s lng nhp. View ny c dng thng k tng s lng nhp theo n hng. CREATE VIEW vw_DONDH_TongSLNhap AS SELECT DONDH.SoDH, SUM(CTPNHAP.SLNhap) AS TongSLNhap FROM PNHAP RIGHT JOIN DONDH ON PNHAP.SoDH=DONDH.SoDH LEFT JOIN CTPNHAP ON PNHAP.SoPN= CTPNHAP.SoPN GROUP BY DONDH.SoDH GO 2. To view c tn vw_DONDH_TongSLDatNhap bao gm cc thng tin: s t hng, tng s lng t, tng s lng nhp. View ny dng thng k nhng n t hng no c nhp hng y .

CREATE VIEW vw_DONDH_TongSLDatNhap AS SELECT DONDH.SoDH, SUM (CTDONDH.SLDat) AS TongSLDat,

SUM (CTPNHAP.SLNhap) AS TongSLNhap FROM CTDONDH LEFT JOIN DONDH ON CTDONDH.SoDH = DONDH.SoDH LEFT JOIN PNHAP ON CTDONDH.SoDH = PNHAP.SoDH LEFT JOIN CTPNHAP ON PNHAP.SoPN = CTPNHAP.SoPN AND CTDONDH.MaVTu = dbo.CTPNHAP.MaVTu GROUP BY DONDH.SoDH GO 3. To view c tn vw_DONDH_DaNhapDu bao gm cc thng tin: s t hng, thng bo. Trong ct thng bo c 2 gi tr l nhp nu n t hng nhp hoc Cha nhp nu n t hng cha nhp . CREATE VIEW vw_DONDH_DaNhapDu AS SELECT CTDONDH.SoDH, CASE WHEN SUM(CTPNHAP.SLNhap) >= SUM(CTDONDH.SLDat) THEN N' nhp ' ELSE N'Cha nhp ' END AS DaNhapDu FROM CTDONDH LEFT JOIN DONDH ON CTDONDH.SoDH = DONDH.SoDH LEFT JOIN PNHAP ON CTDONDH.SoDH = PNHAP.SoDH LEFT JOIN CTPNHAP ON CTDONDH.MaVTu = CTPNHAP.MaVTu AND PNHAP.SoPN = CTPNHAP.SoPN GROUP BY CTDONDH.SoDH GO 4. To view c tn vw_TongNhap bao gm cc thng tin: nm thng, m vt t, tng s lng nhp. View ny dng thng k s lng nhp ca cc vt t trong tng nm thng tng ng ( nm thng c dng YYYY-MM). Ch : khng s dng bng tn kho.

5. To view c tn vw_TongXuat bao gm cc thng tin: nm thng, m vt t, tng s lng xut. View ny dng thng k s lng xut ca cc vt t trong tng nm thng tng ng ( nm thng c dng YYYY-MM). Ch : khng s dng bng tn kho.

6. To view bao gm cc thng tin: s n hng, Ngy t hng, Tng s lng t . View ny dng thng k tng s lng t hng theo tng s n hng trong thng 1 nm 2007. CREATE VIEW vw_DONDH_TongSLDat AS SELECT DONDH.SoDH, NgayDH, SUM(SLDat)AS TongSLDat FROM DONDH INNER JOIN CTDONDH ON DONDH.SoDH=CTDONDH.SoDH WHERE CONVERT(CHAR(6),NgayDH,112)='200701' GROUP BY DONDH.SoDH, NgayDH GO

7. To view bao gm cc thng tin sau: S phiu nhp, Ngy nhp, Tng s lng nhp. View ny dng thng k tng s lng nhp hng theo tng s phiu trong nm ngoi. CREATE VIEW vw_PNHAP_TongSLNhap AS SELECT PNHAP.SoPN, NgayNhap, SUM(SLNhap) AS TongSLNhap FROM PNHAP INNER JOIN CTPNHAP ON PNHAP.SoPN=CTPNHAP.SoPN WHERE CONVERT(CHAR(4),NgayNhap,112)='2011' GROUP BY PNHAP.SoPN, NgayNhap GO

V. To cc th tc lu tr ( Stored Procedure ) sau: 1. Xy dng th tc tnh s lng t hng vi tn spud_DONDH_TinhSLDat gm c 2 tham s vo l : S t hng v m vt t, 1 tham s ra l : S lng t hng ca mt vt t theo mt s t hng.

CREATE PROCEDURE 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 GO 2. Xy dng th tc tnh tng s lng nhp hng vi tn spud_PNHAP_TinhTongSLNHang gm 2 tham s vo l : S t hng v m vt t, 1 tham s ra l: Tng s lng nhp hng ca mt vt t theo mt s t hng. CREATE PROCEDURE spud_PNHAP_TinhTongSLNHang @SoDH CHAR(4), @MaVTu CHAR(4), @TongSLNhap INT OUTPUT AS DECLARE @KQ INT SELECT @KQ= SUM(SLNhap)FROM CTPNHAP INNER JOIN PNHAP ON CTPNHAP.SoPN=PNHAP.SoPN WHERE SoDH=@SoDH AND MaVTu=@MaVTu SET @TongSLNhap = ISNULL(@KQ,0) GO 3. Xy dng th tc thm mi d liu vo bng VATTU vi tn spud_VATTU_Them gm c 4 tham s vo chnh l gi tr thm mi cho cc ct trong bng VATTU: m vt t, tn vt t, n v tnh, phn trm. Trong cn kim tra cc rng buc d liu phi hp l trc khi thc hin lnh INSERT INTO thm d liu vo cc bng VATTU: M vt t phi cha c trong bng VATTU.

CREATE PROCEDURE spud_VATTU_Them @MaVTu CHAR(4), @TenVTu VARCHAR(100), @DVTinh VARCHAR(50),@PhanTram REAL AS IF EXISTS (SELECT * FROM VATTU WHERE MaVTu=@MaVTu) BEGIN PRINT N'M vt t ny c => Khng thm c' RETURN END INSERT INTO VATTU VALUES (@MaVTu, @TenVTu, @DVTinh, @PhanTram) GO 4. Xy dng th tc xa mt vt t c trong bng VATTU vi tn spud_VATTU_Xoa gm c mt tham s vo chnh l m vt t cn xa. Trong cn kim tra rng buc d liu trc khi thc hin lnh DELETE xa d liu trong bng VATTU: - M vt t phi cha c trong bng CTDONDH - M vt t phi cha c trong bng CTPNHAP - M vt t phi cha c trong bng CTPXUAT - M vt t phi cha c trong bng TONKHO CREATE PROCEDURE spud_VATTU_Xoa @MaVTu CHAR(4) AS IF EXISTS ( SELECT * FROM CTDONDH WHERE MaVTu=@MaVTu) BEGIN PRINT N'M vt t ny c trong bng CTDONDH => Khng xa c' RETURN END IF EXISTS ( SELECT * FROM CTPNHAP WHERE MaVTu=@MaVTu) BEGIN PRINT N'M vt t ny c trong bng CTPNHAP => Khng xa c' RETURN END IF EXISTS ( SELECT * FROM CTPXUAT WHERE MaVTu=@MaVTu) BEGIN PRINT N'M vt t ny c trong bng CTPXUAT => Khng xa c' RETURN END IF EXISTS ( SELECT * FROM TONKHO WHERE MaVTu=@MaVTu) BEGIN PRINT N'M vt t ny c trong bng TONKHO => Khng xa c' RETURN END DELETE VATTU WHERE MaVTu=@MaVTu

GO 5. Xy dng th tuc sa i vt t trong bng VATTU vi tn supd_VATTU_Sua gm c 4 tham s vo chnh l gi tr cn thay i ca cc ct trong bng VATTU ( tr ct m vt t): m vt t , tn vt t, n v tnh v phn trm. Trong th tc ch cn thc hin lnh UPDATE SET cp nht d liu vo bng VATTU vi cc gi tr tng ng. CREATE PROCEDURE supd_VATTU_Sua @MaVTu CHAR(4), @TenVTu VARCHAR(100)=NULL, @DVTinh VARCHAR(50)=NULL,@PhanTram REAL=NULL AS IF NOT EXISTS (SELECT * FROM VATTU WHERE MaVTu= @MaVTu) BEGIN PRINT N'M vt t khng tn ti ==> Khng sa c' RETURN END UPDATE VATTU SET TenVTu = ISNULL (@TenVTu, TenVTu), DVTinh = ISNULL (@DVTinh, DVTinh), PhanTram = ISNULL (@PhanTram, PhanTram) WHERE MaVTu= @MaVTu GO 6. Xy dng th tc lit k cc ct d liu trong bng TONKHO c th thm ct TenVTu trong bng VATTU vi tn spud_TONKHO_BCaoTonKho gm c mt tham s vo l : Nm thng mun lc d liu. CREATE PROCEDURE spud_TONKHO_BCaoTonKho @NamThang CHAR(6) AS SELECT a.MaVTu,TenVTu, NamThang , SLDau, TongSLN, TongSLX, SLCuoi FROM TONKHO a INNER JOIN VATTU b ON a.MaVTu=b.MaVTu WHERE NamThang= @NamThang GO 7. Xy dng th tc lit k cc ct d liu trong 2 bng d liu PXUAT v CTPXUAT c th hin thm ct TenVTu trong bng VATTU vi tn l spud_PXUAT_BCaoPXuat gm c mt tham s vo l : S phiu xut mun lc d liu c gi tr mc nh l NULL. Tuy nhin nu lc gi thc hin th tc m khng truyn gi tr s phiu xut vo th xem nh khng lc g c, khi th tc s lit k tt c cc phiu xut ang c trong bng PXUAT. CREATE PROCEDURE spud_PXUAT_BCaoPXuat @SoPX CHAR(4) = NULL AS IF @SoPX IS NULL SELECT a.SoPX,a.MaVTu,TenVTu,SLXuat,DGXuat,NgayXuat, TenKH FROM CTPXUAT a INNER JOIN VATTU b ON a.MaVTu=b.MaVTu INNER JOIN PXUAT c ON a.SoPX=c.SoPX ELSE SELECT a.SoPX,a.MaVTu,TenVTu,SLXuat,DGXuat,NgayXuat, TenKH FROM CTPXUAT a INNER JOIN VATTU b ON a.MaVTu=b.MaVTu INNER JOIN PXUAT c ON a.SoPX=c.SoPX WHERE a.SoPX=@SoPX GO

8. Xy dng th tc tnh tng gi tr hng xut vi 2 tham s vo l thng v nm, 1 tham s ra l tng gi tr hng xut ca thng v nm . CREATE PROCEDURE spud_PXUAT_TongDGXuat @ThangXuat CHAR(2), @NamXuat CHAR(4), @TongDGXuat MONEY OUTPUT AS DECLARE @KQ MONEY SELECT @KQ=SUM(DGXuat) FROM CTPXUAT INNER JOIN PXUAT ON CTPXUAT.SoPX=PXUAT.SoPX WHERE MONTH(NgayXuat)=@ThangXuat AND YEAR(NgayXuat)=@NamXuat SET @TongDGXuat = ISNULL(@KQ,0) GO 9. To th tc thm mi d liu vo bng PNHAP . Trong cn kim tra d liu hp l trc khi thm: - S phiu nhp phi l duy nht - S n hng phi c trong bng DONDH CREATE PROCEDURE spud_PNHAP_Them @SoPN CHAR(4),@NgayNhap DATETIME , @SoDH CHAR(4) AS IF EXISTS (SELECT * FROM PNHAP WHERE SoPN=@SoPN) BEGIN PRINT N'S phiu nhp tn ti ==> Khng th thm c' RETURN END IF NOT EXISTS (SELECT * FROM DONDH WHERE SoDH=@SoDH) BEGIN PRINT N'S n hng khng c trong bng DONDH ==> Khng th thm c' RETURN END INSERT INTO PNHAP VALUES (@SoPN,@NgayNhap,@SoDH) GO

VI. To cc hm (Function) sau:


1. Fn_TongNhapThang(@NamThang, @MaVTu) tr v tng s lng nhp trong thng ca vt t. Ch : @NamThang c dng YYYYMM. CREATE FUNCTION Fn_TongNhapThang (@NamThang CHAR(6), @MaVTu CHAR(4)) RETURNS INT BEGIN DECLARE @KQ INT SELECT @KQ= SUM(SLNhap) FROM CTPNHAP INNER JOIN PNHAP ON CTPNHAP.SoPN=PNHAP.SoPN WHERE MaVTu=@MaVTu AND CONVERT(CHAR(6),NgayNhap,112)=@NamThang RETURN ISNULL(@KQ,0) END

2. Fn_TongXuatThang (@NamThang, @MaVTu) tr v tng s lng xut trong thng ca vt t. CREATE FUNCTION Fn_TongXuatThang (@NamThang CHAR(6), @MaVTu CHAR(4)) RETURNS INT BEGIN DECLARE @KQ INT SELECT @KQ=SUM (SLXuat) FROM CTPXUAT INNER JOIN PXUAT ON CTPXUAT.SoPX=PXUAT.SoPX WHERE MaVTu=@MaVTu AND CONVERT(CHAR(6),NgayXuat,112)=@NamThang RETURN ISNULL(@KQ,0) END 3. Fn_TongNhap (@SoDH, @MaVTu) tr v tng s lng nhp ca vt t theo s t hng CREATE FUNCTION Fn_TongNhap ( @SoDH CHAR(4), @MaVTu CHAR(4)) RETURNS INT BEGIN DECLARE @Tong INT SELECT @Tong=SUM(SLNhap) FROM PNHAP a INNER JOIN CTPNHAP b ON a.SoPN=b.SoPN WHERE SoDH=@SoDH AND MaVTu=@MaVTu RETURN ISNULL(@Tong,0) END 4. S dng hm Fn_TongNhap to vit hm Fn_ConNhap (@SoDH, @MaVTu) tr v s lng cn phi nhp ca m vt t theo s t hng

CREATE FUNCTION Fn_ConNhap ( @SoDH CHAR(4), @MaVTu CHAR(4)) RETURNS INT BEGIN DECLARE @KQ INT SELECT @KQ= SUM(SLDat) - DBO.Fn_TongNhap (@SoDH, @MaVTu) FROM CTDONDH WHERE SoDH=@SoDH AND MaVTu=@MaVTu RETURN ISNULL(@KQ,0) END 5. Fn_TonCuoi (@MaVTu, @NamThang)tr v s lng tn cui k ca vt t theo nm thng. CREATE FUNCTION Fn_TonCuoi (@MaVTu CHAR(4), @NamThang CHAR(6)) RETURNS INT BEGIN DECLARE @KQ INT SELECT @KQ = SLCuoi FROM TONKHO WHERE MaVTu=@MaVTu AND NamThang=@NamThang RETURN ISNULL(@KQ,0) END

6. S dng hm Fn_ConNhap to vit hm Fn_DS_VatTuConNhap (@SoDH) lit k SoDH, MaVTu, TenVTu, SLConNhap ca cc vt t cha nhp .

CREATE FUNCTION Fn_DS_VatTuConNhap (@SoDH CHAR(4)) RETURNS @DSVT TABLE ( SoDH CHAR(4), MaVTu CHAR(4), TenVTu VARCHAR(100), SLConNhap INT ) AS BEGIN INSERT INTO @DSVT SELECT SoDH, a.MaVTu, TenVTu, dbo.Fn_ConNhap(SoDH,a.MaVTu) FROM CTDONDH a INNER JOIN VATTU b ON a.MaVTu=b.MaVTu WHERE SoDH=@SoDH DELETE @DSVT WHERE SLConNhap < = 0 RETURN END 7. Fn_CongThang(@NamThang, @n) tr v chui nm thng mi c cng i n thng (n l mt s nguyn). Ch : @NamThang l chui c dng YYYYMM. CREATE FUNCTION Fn_CongThang ( @NamThang CHAR(6), @n INT) RETURNS CHAR(6) BEGIN DECLARE @KQ CHAR(6), @Ngay DATETIME SET @Ngay= RIGHT (@NamThang,2)+ '/' +'1'+ '/'+ LEFT(@NamThang,4) SET @Ngay = DATEADD(mm,@n,@Ngay) SET @KQ = CONVERT(CHAR(6),@Ngay,112) RETURN ISNULL(@KQ,0) END 8. S dng hm Fn_TonCuoi v Fn_CongThang to vit hm Fn_DS_TonKho_Lech_1Thang (@NamThang) lit k cc thng tin trong bng tn kho ca cc vt t m thng tin tn u k ca nm thng truyn vo khng bng thng tin tn cui k ca nm thng trc.

CREATE FUNCTION Fn_DS_TonKho_Lech_1Thang (@NamThang CHAR(6)) RETURNS @DSTKLech1Thang TABLE ( MaVTu CHAR(4), SLDau INT, SLCuoi INT ) BEGIN DECLARE @NamThang_Truoc CHAR(6) SET @NamThang_Truoc = dbo.Fn_CongThang(@NamThang,-1) INSERT INTO @DSTKLech1Thang SELECT MaVTu, SLDau, dbo.Fn_TonCuoi(@NamThang_Truoc,MaVTu) FROM TONKHO

WHERE NamThang=@NamThang DELETE @DSTKLech1Thang WHERE SLDau=SLCuoi RETURN END 9. Hm tr v mt bng gm cc thng tin: SoPN, NgayNhap, Tng tin nhp ( vi tham s truyn vo l SoPN)

CREATE FUNCTION Fn_DSPNHAP (@SoPN CHAR(4)) RETURNS TABLE AS RETURN( SELECT a.SoPN, NgayNhap, SUM(SLNhap*DGNhap)AS TongTienNhap FROM PNHAP a INNER JOIN CTPNHAP b ON a.SoPN=b.SoPN WHERE a.SoPN=@SoPN GROUP BY a.SoPN, NgayNhap) GO 10. Vit hm tr v mt bng gm cc thng tin: SoPX, NgayXuat, TongTienXuat ( vi tham s truyn vo l SoPX)

CREATE FUNCTION Fn_DSPXUAT (@SoPX CHAR(4)) RETURNS TABLE AS RETURN( SELECT a.SoPX, NgayXuat, SUM(SLXuat*DGXuat)AS TongTienXuat FROM PXUAT a INNER JOIN CTPXUAT b ON a.SoPX=b.SoPX WHERE a.SoPX=@SoPX GROUP BY a.SoPX, NgayXuat) GO

VII. To cc Trigger sau:


1. Xy dng Trigger khi thm mi d liu vo bng PNHAP vi tn tg_PNHAP_Them. Trong cn kim tra cc rng buc d liu phi hp l. - S t hng phi c trong bng DONDH. - Ngy nhp hng phi sau ngy t hng.

CREATE TRIGGER tg_PNHAP_Them ON PNHAP FOR INSERT AS DECLARE @SoDH CHAR(4), @NgayNhap DATETIME SELECT @SoDH=SoDH, @NgayNhap=NgayNhap FROM INSERTED IF NOT EXISTS (SELECT * FROM DONDH WHERE SoDH=@SoDH) BEGIN RAISERROR ('S n hng ny cha c trong bng DONDH nn khng thm c',16,1) ROLLBACK TRAN RETURN END DECLARE @NgayDH DATETIME SELECT @NgayDH=NgayDH FROM DONDH WHERE SoDH=@SoDH IF @NgayNhap < @NgayDH BEGIN RAISERROR ('Ngy nhp hng phi sau ngy t hng',16,1)

ROLLBACK TRAN RETURN END GO 2. Xy dng trigger khi thm mi d liu vo bng CTPNHAP vi tn tg_CTPNHAP_Them . Trong cn kim tra cc rng buc d liu phi hp l: - S lng nhp hng <= (S lng t Tng s lng nhp vo trc ) CREATE TRIGGER tg_CTPNHAP_Them ON CTPNHAP FOR INSERT AS DECLARE @SoDH CHAR(4), @MaVTu CHAR(4),@SLDat INT, @SoPN CHAR(4), @SLNhap INT, @TongNhap INT SELECT @SoDH=PNHAP.SoDH, @SoPN=INSERTED.SoPN,@MaVTu=INSERTED.MaVTu,@SLNhap=SLNhap FROM INSERTED INNER JOIN PNHAP ON INSERTED.SoPN=PNHAP.SoPN SELECT @TongNhap=SUM(SLNhap) FROM CTPNHAP INNER JOIN PNHAP ON CTPNHAP.SoPN=PNHAP.SoPN WHERE PNHAP.SoDH=@SoDH AND CTPNHAP.MaVTu=@MaVTu AND @SoPN NOT IN (SELECT CTPNHAP.SoPN FROM CTPNHAP INNER JOIN INSERTED ON CTPNHAP.SoPN<>INSERTED.SoPN) SELECT @SLDat=SLDat FROM CTDONDH WHERE SoDH=@SoDH AND MaVTu=@MaVTu IF @SLNhap>@SLDat-@TongNhap BEGIN RAISERROR ('Bn nhp qu nhiu hng',16,1) ROLLBACK TRAN RETURN END GO 3. Xy dng Trigger khi xa d liu trong bng PXUAT vi tn tg_PXUAT_Xa .Trong cn thc hin cc hnh ng: - Thc hin t ng xa cc dng d liu lin quan bn bng CTPXUAT CREATE TRIGGER tg_PXUAT_Xoa ON PXUAT FOR DELETE AS DECLARE @SoPX CHAR(4), @NgayXuat DATETIME, @TenKH VARCHAR(100) SELECT @SoPX=SoPX, @NgayXuat=NgayXuat, @TenKH=TenKH FROM DELETED DELETE CTPXUAT WHERE CTPXUAT.SoPX=@SoPX GO

4.

You might also like