Windows Việt

Cộng Đồng Công Nghệ Thông Tin Việt

Trang ChínhTrang Chính  Sự kiện  Tìm kiếmTìm kiếm  Đăng kýĐăng ký  Đăng NhậpĐăng Nhập  

Share
 
 Giải đề thi QTCSDL cuối kỳ......full 5 đề
Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down 
Tác giảThông điệp
daokiem_votinh64
Member

daokiem_votinh64
Member
Giới tính : Nam
Tuổi : 31
Posts Posts : 556
Coins Coins : 2157
Thanked Thanked : 168
Giải đề thi QTCSDL cuối kỳ......full 5 đề Empty

Mình làm đề 3 nên chỉ có có bài giải đè này.mình sẽ kiếm các đè khác thông qua mấy thằng bạn khác sau.

Code:
CREATE TRIGGER TRIGGER_CTHH_03 ON CTHD FOR UPDATE
AS
BEGIN
   DECLARE @MAHD NVARCHAR(11)
   DECLARE @MAHH NVARCHAR(5)
   DECLARE @SLBAN1 FLOAT
   DECLARE @SLBAN2 FLOAT
   DECLARE @THANHTIEN1 FLOAT
   DECLARE @THANHTIEN2 FLOAT
   SET @MAHD=(SELECT MAHD FROM DELETED)
   SET @MAHH=(SELECT MAHH FROM DELETED)
   SET @SLBAN1=(SELECT SLBAN FROM INSERTED)
   SET @SLBAN2=(SELECT SLBAN FROM DELETED)
   SET @THANHTIEN1=(SELECT THANHTIEN FROM INSERTED)
   SET @THANHTIEN2=(SELECT THANHTIEN FROM DELETED)      
   IF((SELECT * FROM CTHD WHERE MAHD=@MAHD AND MAHH=@MAHH) IS NULL)
   BEGIN
      RAISE RROR('MA HANG HOA KHONG TON TAI',16,1)
      ROLLBACK TRAN
      RETURN
   END
   IF(@SLBAN1>(SELECT SLTON FROM HANG_HOA WHERE MAHH=@MAHH))
   BEGIN
      RAISERROR('SO LUONG BAN LON HON SO LUONG TON KHO',16,1)
      ROLLBACK TRAN
      RETURN
   END
   UPDATE HOA_DON SET TONGTIEN=TONGTIEN+(@THANHTIEN1-@THANHTIEN2) WHERE MAHD=@MAHD
   UPDATE HANG_HOA SET SLTON=SLTON+(@SLBAN2-@SLBAN1) WHERE MAHH=@MAHH
END
GO

CREATE PROC SP_XOAPHIEUXUAT
@MAPX NVARCHAR(11)
AS
   IF( NOT EXISTS(SELECT * FROM PHIEU_XUAT WHERE MAPX=@MAPX))
   BEGIN
      PRINT 'MA PHIEU XUAT TRUYEN VAO KHONG TON TAI'
      RETURN
   END
   DECLARE @CUR_PHIEUXUAT CURSOR
   SET @CUR_PHIEUXUAT=CURSOR FOR SELECT MAHH,SOLUONG FROM CTPX WHERE MAPX=@MAPX
   DECLARE @MAHH NVARCHAR(11)
   DECLARE @SOLUONG INT
   OPEN @CUR_PHIEUXUAT
   FETCH NEXT FROM @CUR_PHIEUXUAT INTO @MAHH,@SOLUONG
   WHILE(@@FETCH_STATUS=0)
   BEGIN
      DELETE FROM CTPX WHERE MAPX=@MAPX AND MAHH=@MAHH
      UPDATE HANG_HOA SET SLTON=SLTON+@SOLUONG WHERE MAHH=@MAHH
      FETCH NEXT FROM @CUR_PHIEUXUAT INTO @MAHH,@SOLUONG
   END
   DELETE FROM PHIEU_XUAT WHERE MAPX=@MAPX
   PRINT 'DA XOA PHIEU XUAT CO MA : '+@MAPX+' RA KHOI HE THONG'
   CLOSE @CUR_PHIEUXUAT
   DEALLOCATE @CUR_PHIEUXUAT
GO

anh em ch ý kiến hen


Giải đề thi QTCSDL cuối kỳ......full 5 đề Untitled-1


Được sửa bởi daokiem_votinh64 ngày Sun 30 May 2010, 15:09; sửa lần 1.

※ Bài viết cùng chuyên mục


Tác giảThông điệp
daokiem_votinh64
Member

daokiem_votinh64
Member
Giới tính : Nam
Tuổi : 31
Posts Posts : 556
Coins Coins : 2157
Thanked Thanked : 168
Giải đề thi QTCSDL cuối kỳ......full 5 đề Empty

tiếp tục cập nhật các đề còn lại đây

đề 1:
Code:
CREATE TRIGGER TRIGGER_CTHH_01 ON CTHD FOR INSERT
AS
BEGIN
   DECLARE @MAHD NVARCHAR(11)
   DECLARE @MAHH NVARCHAR(5)
   DECLARE @SLBAN FLOAT
   DECLARE @THANHTIEN FLOAT
   SET @MAHD=(SELECT MAHD FROM INSERTED)
   SET @MAHH=(SELECT MAHH FROM INSERTED)
   SET @SLBAN=(SELECT SLBAN FROM INSERTED)
   SET @THANHTIEN=(SELECT THANHTIEN FROM INSERTED)
   IF(NOT EXISTS (SELECT * FROM INSERTED WHERE MAHD=@MAHD AND MAHH=@MAHH))
   BEGIN
      RAISERROR('MA HANG HOA DA TON TAI',16,1)
      ROLLBACK TRAN
      RETURN
   END
   IF(@SLBAN>(SELECT SLTON FROM HANG_HOA WHERE MAHH=@MAHH))
   BEGIN
      RAISERROR('SO LUONG BAN LON HON SO LUONG TON KHO',16,1)
      ROLLBACK TRAN
      RETURN
   END
   UPDATE HOA_DON SET TONGTIEN=TONGTIEN+@THANHTIEN WHERE MAHD=@MAHD
   UPDATE HANG_HOA SET SLTON=SLTON-@SLBAN WHERE MAHH=@MAHH
END
GO


CREATE PROC SP_TONGTIENCHIECKHAUDAILY
@MADL NVARCHAR(5),@NGAYBATDAU DATETIME,@NGAYKETTHUC DATETIME
AS
   IF( NOT EXISTS(SELECT * FROM DAI_LY WHERE MADL=@MADL))
   BEGIN
      PRINT 'MA DAI LY TRUYEN VAO KHONG TON TAI'
      RETURN
   END
   IF(DATEDIFF(DD,@NGAYKETTHUC,@NGAYBATDAU)>=0 ORDATEDIFF(DD,GETDATE(),@NGAYKETTHUC)>0)
   BEGIN
      PRINT 'NGAY BAT DAU KHONG DUOC LON HON NGAY KET THUC VA NGAY KET THUC KHONG DUOC LON HON NGAY HIEN TAI'
      RETURN
   END
   DECLARE @TONGTIEN FLOAT
   SET @TONGTIEN=0
   DECLARE @TIENCK FLOAT
   SET @TIENCK=0
   DECLARE @CUR_DAILY CURSOR
   SET @CUR_DAILY=CURSOR FOR SELECT MAHD,NGAYLAP FROM HOA_DON WHERE DATEDIFF(DD,@NGAYBATDAU,NGAYLAP)>=0 AND DATEDIFF(DD,NGAYLAP,@NGAYKETTHUC)>=0 AND @MADL=MADL
   DECLARE @MAHD NVARCHAR(11)
   DECLARE @NGAYLAP DATETIME
   OPEN @CUR_DAILY
   FETCH NEXT FROM @CUR_DAILY INTO @MAHD,@NGAYLAP
   WHILE(@@FETCH_STATUS=0)
   BEGIN
      SET @TIENCK=(SELECT SUM(CT.THANHTIEN*CT.CKBAN) FROM CTHD CT WHERE MAHD=@MAHD)
      SET @TONGTIEN=@TONGTIEN+@TIENCK
      FETCH NEXT FROM @CUR_DAILY INTO @MAHD,@NGAYLAP
   END
   PRINT 'TONG TIEN CHIEC KHAU MA UNILEVER GIAM CHO DAI LY '+@MADL+' LA :'+CAST(@TONGTIEN AS VARCHAR(100))   
   CLOSE @CUR_DAILY
   DEALLOCATE @CUR_DAILY
GO


đề 2:
Code:
CREATE TRIGGER TRIGGER_CTHH_02 ON CTHD FOR DELETE
AS
BEGIN
   DECLARE @MAHD NVARCHAR(11)
   DECLARE @MAHH NVARCHAR(5)
   DECLARE @SLBAN FLOAT
   DECLARE @THANHTIEN FLOAT
   SET @MAHD=(SELECT MAHD FROM DELETED)
   SET @MAHH=(SELECT MAHH FROM DELETED)
   SET @SLBAN=(SELECT SLBAN FROM DELETED)
   SET @THANHTIEN=(SELECT THANHTIEN FROM DELETED)
   IF(NOT EXISTS (SELECT * FROM DELETED WHERE MAHD=@MAHD AND MAHH=@MAHH))
   BEGIN
      RAISERROR('MA HANG HOA KHONG TON TAI',16,1)
      ROLLBACK TRAN
      RETURN
   END
   UPDATE HOA_DON SET TONGTIEN=TONGTIEN-@THANHTIEN WHERE MAHD=@MAHD
   UPDATE HANG_HOA SET SLTON=SLTON+@SLBAN WHERE MAHH=@MAHH
   IF(NOT EXISTS(SELECT * FROM CTHD WHERE MAHD=@MAHD))
      DELETE FROM HOA_DON WHERE MAHD=@MAHD
END
GO
CREATE PROC SP_TONGTIENNHOMHANG
@MANHOM NVARCHAR(5),@NGAYBATDAU DATETIME,@NGAYKETTHUC DATETIME
AS
   IF( NOT EXISTS(SELECT * FROM NHOM_HANG WHERE MANHOM=@MANHOM))
   BEGIN
      PRINT 'MA NHOM HANG TRUYEN VAO KHONG TON TAI'
      RETURN
   END
   IF(DATEDIFF(DD,@NGAYKETTHUC,@NGAYBATDAU)>=0 OR DATEDIFF(DD,GETDATE(),@NGAYKETTHUC)>0)
   BEGIN
      PRINT 'NGAY BAT DAU KHONG DUOC LON HON NGAY KET THUC VA NGAY KET THUC KHONG DUOC LON HON NGAY HIEN TAI'
      RETURN
   END
   DECLARE @TONGTIEN FLOAT
   SET @TONGTIEN=0
   DECLARE @TIENBAN FLOAT
   SET @TIENBAN=0
   DECLARE @CUR_HANGHOA CURSOR
   SET @CUR_HANGHOA=CURSOR FOR SELECT MAHH FROM HANG_HOA WHERE MANHOM=@MANHOM
   DECLARE @MAHH NVARCHAR(5)
   OPEN @CUR_HANGHOA
   FETCH NEXT FROM @CUR_HANGHOA INTO @MAHH
   WHILE(@@FETCH_STATUS=0)
   BEGIN
      SET @TIENBAN=(SELECT SUM(CT.THANHTIEN) FROM CTHD CT,HOA_DON HD WHERE CT.MAHH=@MAHH AND CT.MAHD=HD.MAHD AND DATEDIFF(DD,@NGAYBATDAU,NGAYLAP)>=0 AND DATEDIFF(DD,NGAYLAP,@NGAYKETTHUC)>=0)
      IF(@TIENBAN!=0)
         SET @TONGTIEN=@TONGTIEN+@TIENBAN
      FETCH NEXT FROM @CUR_HANGHOA INTO @MAHH
   END
   PRINT 'TONG TIEN DOANG THU BAN DUOC CUA NHOM HANG '+@MANHOM+' LA :'+CAST(@TONGTIEN AS VARCHAR(100))   
   CLOSE @CUR_HANGHOA
   DEALLOCATE @CUR_HANGHOA
GO


Giải đề thi QTCSDL cuối kỳ......full 5 đề Untitled-1

※ Bài viết cùng chuyên mục


Tác giảThông điệp
daokiem_votinh64
Member

daokiem_votinh64
Member
Giới tính : Nam
Tuổi : 31
Posts Posts : 556
Coins Coins : 2157
Thanked Thanked : 168
Giải đề thi QTCSDL cuối kỳ......full 5 đề Empty

đề 4:
Code:
CREATE TRIGGER TRIGGER_CTPX_04 ON CTPX FOR INSERT
AS
BEGIN
   DECLARE @MAPX NVARCHAR(11)
   DECLARE @MAHH NVARCHAR(5)
   DECLARE @SOLUONG INT
   SET @MAPX=(SELECT MAPX FROM INSERTED)
   SET @MAHH=(SELECT MAHH FROM INSERTED)
   SET @SOLUONG=(SELECT SOLUONG FROM INSERTED)
   IF(NOT EXISTS (SELECT * FROM INSERTED WHERE MAPX=@MAPX AND MAHH=@MAHH))
   BEGIN
      RAISERROR('MA HANG HOA KHONG TON TAI',16,1)
      ROLLBACK TRAN
      RETURN
   END
   IF(@SOLUONG>(SELECT SLTON FROM HANG_HOA WHERE MAHH=@MAHH))
   BEGIN
      RAISERROR('SO LUONG BAN LON HON SO LUONG TON KHO',16,1)
      ROLLBACK TRAN
      RETURN
   END
   UPDATE HANG_HOA SET SLTON=SLTON-@SOLUONG WHERE MAHH=@MAHH
END
GO

CREATE PROC SP_TONGTIENDOI
@MADOI NVARCHAR(3),@NGAYBATDAU DATETIME,@NGAYKETTHUC DATETIME
AS
   IF( NOT EXISTS(SELECT * FROM DOI WHERE MADOI=@MADOI))
   BEGIN
      PRINT 'MA DOI TRUYEN VAO KHONG TON TAI'
      RETURN
   END
   IF(DATEDIFF(DD,@NGAYKETTHUC,@NGAYBATDAU)>=0 OR DATEDIFF(DD,GETDATE(),@NGAYKETTHUC)>0)
   BEGIN
      PRINT 'NGAY BAT DAU KHONG DUOC LON HON NGAY KET THUC VA NGAY KET THUC KHONG DUOC LON HON NGAY HIEN TAI'
      RETURN
   END
   DECLARE @TONGTIEN FLOAT
   SET @TONGTIEN=0
   DECLARE @TIEN FLOAT
   SET @TIEN=0
   DECLARE @CUR_DOI CURSOR
   SET @CUR_DOI=CURSOR FOR SELECT MANV FROM NHAN_VIEN WHERE MADOI=@MADOI
   DECLARE @MANV NVARCHAR(10)
   OPEN @CUR_DOI
   FETCH NEXT FROM @CUR_DOI INTO @MANV
   WHILE(@@FETCH_STATUS=0)
   BEGIN
      SET @TIEN=(SELECT SUM(TONGTIEN) FROM HOA_DON WHERE MANV=@MANV AND DATEDIFF(DD,@NGAYBATDAU,NGAYLAP)>=0 AND DATEDIFF(DD,NGAYLAP,@NGAYKETTHUC)>=0)
      IF(@TIEN!=0)
         SET @TONGTIEN=@TONGTIEN+@TIEN
      FETCH NEXT FROM @CUR_DOI INTO @MANV
   END
   PRINT 'TONG TIEN BAN HANG CUA DOI '+@MADOI+' LA :'+CAST(@TONGTIEN AS VARCHAR(100))   
   CLOSE @CUR_DOI
   DEALLOCATE @CUR_DOI
GO

đề 5:
Code:
CREATE TRIGGER TRIGGER_CTPX_05 ON CTPX FOR DELETE
AS
BEGIN
   DECLARE @MAPX NVARCHAR(11)
   DECLARE @MAHH NVARCHAR(5)
   DECLARE @SOLUONG INT
   SET @MAPX=(SELECT MAPX FROM DELETED)
   SET @MAHH=(SELECT MAHH FROM DELETED)
   SET @SOLUONG=(SELECT SOLUONG FROM DELETED)
   IF(NOT EXISTS (SELECT * FROM DELETED WHERE MAPX=@MAPX AND MAHH=@MAHH))
   BEGIN
      RAISERROR('MA HANG HOA KHONG TON TAI',16,1)
      ROLLBACK TRAN
      RETURN
   END
   UPDATE HANG_HOA SET SLTON=SLTON+@SOLUONG WHERE MAHH=@MAHH
   IF(NOT EXISTS(SELECT * FROM CTPX WHERE MAPX=@MAPX))
      DELETE FROM PHIEU_XUAT WHERE MAPX=@MAPX
END
GO

CREATE PROC SP_XOAHOADON
@MAHD NVARCHAR(11)
AS
   IF( NOT EXISTS(SELECT * FROM HOA_DON WHERE MAHD=@MAHD))
   BEGIN
      PRINT 'MA HOA TRUYEN VAO KHONG TON TAI'
      RETURN
   END
   DECLARE @CUR_HOADON CURSOR
   SET @CUR_HOADON=CURSOR FOR SELECT MAHH,SLBAN FROM CTHD WHERE MAHD=@MAHD
   DECLARE @MAHH NVARCHAR(5)
   DECLARE @SLBAN INT
   OPEN @CUR_HOADON
   FETCH NEXT FROM @CUR_HOADON INTO @MAHH,@SLBAN
   WHILE(@@FETCH_STATUS=0)
   BEGIN
      DELETE FROM CTHD WHERE MAHD=@MAHD AND MAHH=@MAHH
      UPDATE HANG_HOA SET SLTON=SLTON+@SLBAN WHERE MAHH=@MAHH
      FETCH NEXT FROM @CUR_HOADON INTO @MAHH,@SLBAN
   END
   DELETE FROM HOA_DON WHERE MAHD=@MAHD
   PRINT 'DA XOA HOA DON CO MA : '+@MAHD+' RA KHOI HE THONG'
   CLOSE @CUR_HOADON
   DEALLOCATE @CUR_HOADON
GO

chưa có đề hoàn chỉnh nên chưa up đề lên.đợi sau nha
thank em vài phát lấy tinh thần nhé


Giải đề thi QTCSDL cuối kỳ......full 5 đề Untitled-1

※ Bài viết cùng chuyên mục


Tác giảThông điệp
BLACKCAT
Member

BLACKCAT
Member
Giới tính : Nam
Tuổi : 30
Posts Posts : 349
Coins Coins : 377
Thanked Thanked : 53
Giải đề thi QTCSDL cuối kỳ......full 5 đề Empty

Mấy đề kia thì hông bít còn đề 5 làm vậy là khá chuẩn rùi, Kiểm tra tồn tại MaHH ko dùng is null hả Nghiệp...thanks đã chia sẻ

※ Bài viết cùng chuyên mục


Tác giảThông điệp
boyluck04
Member

boyluck04
Member
Giới tính : Nam
Tuổi : 30
Posts Posts : 16
Coins Coins : 28
Thanked Thanked : 0
Giải đề thi QTCSDL cuối kỳ......full 5 đề Empty

Bạn Nghiệp tốt quá, bỏ công sức ra tìm hiểu cả 5 đề rồi giải lại cho anh em mình tham khảo. Cảm ơn nhiều nhé.

※ Bài viết cùng chuyên mục


Tác giảThông điệp
acb093
Member

acb093
Member
Giới tính : Nam
Tuổi : 31
Posts Posts : 416
Coins Coins : 400
Thanked Thanked : 43
Giải đề thi QTCSDL cuối kỳ......full 5 đề Empty

đề 5 câu 2 cách làm khác (ko dùng cursor)


Code:
CREATE PROC SP_XOAHOADON
@MAHD NVARCHAR(11)
AS
  IF( NOT EXISTS(SELECT * FROM HOA_DON WHERE MAHD=@MAHD))
  BEGIN
      PRINT 'MA HOA don KHONG TON TAI'
      RETURN
  END
  UPDATE HANG_HOA hh SET SLTON = (select slban from cthd where cthd.mahd = @mahd and cthd.mahh = hh.mahh)
  DELETE FROM CTHD WHERE MAHD=@MAHD
  DELETE FROM HOA_DON WHERE MAHD=@MAHD
  PRINT 'DA XOA'


Học miễn phí - Tổ chức hội thảo chuyên nghiệp

※ Bài viết cùng chuyên mục


Tác giảThông điệp
daokiem_votinh64
Member

daokiem_votinh64
Member
Giới tính : Nam
Tuổi : 31
Posts Posts : 556
Coins Coins : 2157
Thanked Thanked : 168
Giải đề thi QTCSDL cuối kỳ......full 5 đề Empty

Nhìn thấy chỗ sai của chú đấy nhé.chứ nếu không chẳng lẻ đề dễ vậy

cái đề kêu sau khi xóa chi tiếc hóa đơn thì phải tăng slton của hang hóa tương ứng với mahh của chi tiếc hóa đơn bị xóa.còn ở đây bác chỉ select slban ra rùi gán cho slton,-->đâu có thỏa đâu.chưa nói tới việc là với mỗi mahd sẽ có nhiều mahh,sẽ cập nhật cho nhiều slton của nhiều mahh nữa.vậy là tiêu .cách của bác chết nhé. Wink


Giải đề thi QTCSDL cuối kỳ......full 5 đề Untitled-1

※ Bài viết cùng chuyên mục


Tác giảThông điệp
acb093
Member

acb093
Member
Giới tính : Nam
Tuổi : 31
Posts Posts : 416
Coins Coins : 400
Thanked Thanked : 43
Giải đề thi QTCSDL cuối kỳ......full 5 đề Empty

Code:
UPDATE HANG_HOA hh SET SLTON = slton + (select slban from cthd where cthd.mahd = @mahd and cthd.mahh = hh.mahh)

nhầm xí, quên cộng với slton ban đầu.

cái lỗi trên thì công nhận nhưng còn cái này thì chú xem lại nhá Very Happy
Trích dẫn :

chưa nói tới việc là với mỗi mahd sẽ có nhiều mahh,sẽ cập nhật cho nhiều slton của nhiều mahh nữa.vậy là tiêu .cách của bác chết nhé. Wink


Học miễn phí - Tổ chức hội thảo chuyên nghiệp

※ Bài viết cùng chuyên mục


Tác giảThông điệp
daokiem_votinh64
Member

daokiem_votinh64
Member
Giới tính : Nam
Tuổi : 31
Posts Posts : 556
Coins Coins : 2157
Thanked Thanked : 168
Giải đề thi QTCSDL cuối kỳ......full 5 đề Empty

trong câu lênh update không cho đổi tên table dâu nha chú.nếu bỏ cái "hh" thì ok.
tui cứ nghĩ là do câu lẹnh update chỉ update dc cho 1 dòng.nhờ chú mà khám phá thêm cái mới.Thank nhá. Giải đề thi QTCSDL cuối kỳ......full 5 đề 798262


Giải đề thi QTCSDL cuối kỳ......full 5 đề Untitled-1

※ Bài viết cùng chuyên mục


Tác giảThông điệp
Sponsored content


Giải đề thi QTCSDL cuối kỳ......full 5 đề Empty

※ Bài viết cùng chuyên mục


 
Giải đề thi QTCSDL cuối kỳ......full 5 đề
Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang 
Trang 1 trong tổng số 1 trang

Permissions in this forum:Bạn không có quyền trả lời bài viết
Windows Việt :: Lưu Trữ :: Lưu Trữ - Các môn học cũ :: Quản Trị Cơ Sở Dữ Liệu-
[Windows Việt] Deverloped by Nguyễn Gia Phú - https://windows.forumvi.com
Powered by © Forumotion.com - phpBB™ version ©phpBB2
Go to top Go to bottom