1. Storedprocedure tính tổng của 2 số nguyên. CREATE PROCEDURE sp_Tong So1 int, So2 int, Tong int out AS Begin SET Tong = So1 + So2; End Kiểm tra Declare Sum int Exec sp_Tong 1, 2, out Sum Select Sum 2. Stored procedure liệt kê những thông tin của đầu sách, thông tin tựa sách và số lượng sách hiện chưa được mượn của một đầu sách cụ thể (ISBN). Với Tuasach (ma_tuasach, tuasach, tacgia, tomtat) Dausach (isbn, ma_tuasach, ngonngu, bia, trangthai) Cuonsach (isbn, ma_cuonsach, tinhtrang) CREATE PROCEDURE sp_ThongtinDausach isbn int AS Begin SELECT tuasach, tacgia, ngonngu, bia, trangthai, count() FROM dausach ds, tuasach ts, cuonsach cs WHERE ds.ma_tuasach = ts.ma_tuasach AND ds.isbn = cs.isbn AND ds.isbn = isbn AND tinhtrang = yes GROUP BY tuasach, tacgia, ngonngu, bia, trangthai End 3. Viết hàm tính tuổi của người có năm sinh được nhập vào như một tham số của hàm.
1 Stored-procedure tính tổng số nguyên CREATE PROCEDURE sp_Tong @So1 int, @So2 int, @Tong int out AS Begin SET @Tong = @So1 + @So2; End Kiểm tra Declare @Sum int Exec sp_Tong 1, -2, out @Sum Select @Sum Stored procedure liệt kê thông tin đầu sách, thông tin tựa sách số lượng sách chưa mượn đầu sách cụ thể (ISBN) Với Tuasach (ma_tuasach, tuasach, tacgia, tomtat) Dausach (isbn, ma_tuasach, ngonngu, bia, trangthai) Cuonsach (isbn, ma_cuonsach, tinhtrang) CREATE PROCEDURE sp_ThongtinDausach @isbn int AS Begin SELECT tuasach, tacgia, ngonngu, bia, trangthai, count(*) FROM dausach ds, tuasach ts, cuonsach cs WHERE ds.ma_tuasach = ts.ma_tuasach AND ds.isbn = cs.isbn AND ds.isbn = @isbn AND tinhtrang = yes GROUP BY tuasach, tacgia, ngonngu, bia, trangthai End Viết hàm tính tuổi người có năm sinh nhập vào tham số hàm Create function TinhTuoi(@namsinh int) returns int AS Begin return year(getdate()) - @namsinh End Cho CSDL sau: DocGia (ma_DocGia, ho, tenlot, ten, ngaysinh) Nguoilon (ma_DocGia, sonha, duong, quan, dienthoai, han_sd) Treem (ma_DocGia, ma_DocGia_nguoilon) Tuasach (ma_tuasach, tuasach, tacgia, tomtat) Dausach (isbn, ma_tuasach, ngonngu, bia, trangthai) Cuonsach (isbn, ma_cuonsach, tinhtrang) DangKy (isbn, ma_DocGia, ngay_dk, ghichu) Muon (isbn, ma_cuonsach, ma_DocGia, ngay_muon, ngay_hethan) QuaTrinhMuon(isbn, ma_cuonsach, ngay_muon, ma_DocGia, ngay_hethan, ngay_tra, tien_muon, tien_datra, tien_datcoc, ghichu) Việt stored procedures thưc việc sau: a Xem thông tin độc giả Tên: sp_ThongtinDocGia Nội dung: Liệt kê thông tin độc giả tương ứng với mã độc giả Nếu độc giả người lớn hiển thị thông tin độc giả + thông tin bảng người lớn Nếu độc giả trẻ em hiển thị thông tin độc giả + thông tin bảng trẻ em Thực hiện: [1] Kiểm tra độc giả thuộc loại người lớn hay trẻ em [2] Nếu người lớn thì: In thông độc giả này, gồm có: thông tin độc giả + thông tin người lớn [3] Nếu trẻ em thì: In thông tin liên quan đến độc giả này, gồm có: thông tin độc giả + thông tin trẻ em CREATE PROC sp_ThongtinDocGia AS IF EXISTS(SELECT * FROM DocGia, Nguoilon where DocGia.ma_DocGia BEGIN SELECT * FROM DocGia, Nguoilon where DocGia.ma_DocGia END IF EXISTS(SELECT * FROM DocGia, Treem where DocGia.ma_DocGia BEGIN SELECT * FROM DocGia, Treem where DocGia.ma_DocGia END = Nguoilon.ma_DocGia ) = Nguoilon.ma_DocGia = Treem.ma_DocGia ) = Treem.ma_DocGia b Thông tin đầu sách: Tên: sp_ThongtinDausach Nội dung: Liệt kê thông tin đầu sách, thông tin tựa sách số lượng sách chưa mượn đầu sách cụ thể (ISBN) CREATE PROCEDURE sp_ThongtinDausach AS BEGIN SELECT *, (select count(tinhtrang) from Cuonsach as cs where tinhtrang = 'true' and ds.isbn = cs.isbn group by isbn) as soluong from DauSach as ds join (select ma_tuasach, tuasach, tacgia from Tuasach) as ts on (ts.ma_tuasach = ds.ma_tuasach) END GO c Liệt kê độc giả người lớn mượn sách: Tên: sp_ThongtinNguoilonDangmuon Nội dung: Liệt kê thông tin tất độc giả mượn sách thư viện CREATE PROCEDURE sp_ThongtinNguoilonDangmuon AS BEGIN select * from Nguoilon as ngl join (select ma_DocGia from Muon) as T on (T.ma_DocGia = ngl.ma_DocGia) where NOT EXISTS (select * from QuaTrinhMuon as qt where T.ma_DocGia = qt.ma_DocGia) END GO d Liệt kê độc giả người lớn mượn sách hạn: Tên: sp_ThongtinNguoilonQuahan Nội dung: Liệt kê thông tin tất độc giả mượn sách thư viện tình trạng mượn hạn 14 ngày CREATE PROCEDURE sp_ThongtinNguoilonQuahan AS BEGIN select * from Nguoilon as ngl join (select ma_DocGia from Muon) as T on (T.ma_DocGia = ngl.ma_DocGia) where NOT EXISTS (select * from QuaTrinhMuon as qt where T.ma_DocGia = qt.ma_DocGia) END e Liệt kê độc giả người lớn mượn sách có trẻ em mượn sách: Tên: sp_DocGiaCoTreEmMuon Nội dung: Liệt kê những độc giả tình trạng mượn sách trẻ em độc giả bảo lãnh tình trạng mượn sách Create PROCEDURE sp_DocGiaCoTreEmMuon AS BEGIN select NGL.ma_docgia as ngl,TE.ma_docgia as treem, sonha, duong, quan , dienthoai from Treem as TE join Nguoilon as NGL on (TE.ma_DocGia_nguoilon = NGL.ma_DocGia) j join Muon as m on (m.ma_DocGia = TE.ma_DocGia) where NOT EXISTS (select * from QuaTrinhMuon as qt where TE.ma_DocGia = qt.ma_DocGia) and NOT EXISTS (select * from QuaTrinhMuon as qt where NGL.ma_DocGia = qt.ma_DocGia) END Bài tập 5: Tạo số Trigger sau CSDL Thư viện: 5.1 tg_delMuon: Nội dung: Cập nhật tình trạng sách yes CREATE TRIGGER tg_delMuon ON muon FOR delete AS Begin DECLARE @isbn int, @ma_cuonsach int SELECT @isbn = isbn, @ma_cuonsach = ma_cuonsach FROM deleted UPDATE cuonsach SET tinhtrang = yes WHERE isbn = @isbn AND ma_cuonsach = @ma_cuonsach End GO 5.2 tg_insMuon: Nội dung: Cập nhật tình trạng sách no CREATE TRIGGER tg_insMuon ON muon FOR delete AS Begin DECLARE @isbn int, @ma_cuonsach int SELECT @isbn = isbn, @ma_cuonsach = ma_cuonsach FROM deleted UPDATE cuonsach SET tinhtrang = no WHERE isbn = @isbn AND ma_cuonsach = @ma_cuonsach End GO 5.3 tg_updCuonSach: Nội dung: Khi thuộc tính tình trạng bảng sách cập nhật trạng thái đầu sách cập nhật theo Cài đặt thủ tục sau cho CSDL Quản lý thư viện 5.4 tg_InfThongBao Nội dung: Viết trigger thêm mới, sửa tên tác giả, thêm/sửa tựa sách in câu thông báo Tiếng Việt ‘Đã thêm tựa sách’ Gợi ý : Kiểm tra trigger tạo khối lệnh để liệu không bị thay đổi : begin tran khối lệnh thêm,xóa,sửa Rollback Create Trigger tg_InfThongBao TuaSach for insert,update AS begin declare @ma_tuasach int, @TuaSach nvarchar(63), @tacgia nvarchar(31) select @ma_tuasach = ma_tuasach, @TuaSach = TuaSach,@tacgia= tacgia from inserted if update (ma_tuasach) begin update TuaSach set ma_tuasach=@ma_tuasach,TuaSach=@TuaSach,tacgia=@tacgia where ma_tuasach=@ma_tuasach print N'Thêm sách thành công' end else begin insert into TuaSach(ma_tuasach,TuaSach,tacgia,tomtat) values (@ma_tuasach,@TuaSach,@tacgia,'') print N'Thêm sách thành công' end end Bài tập 6: Viết Function sau CSDL Đề án 6.1 Viết hàm trả tổng tiền lương trung bình phòng ban tùy ý (truyền vào MaPB) CREATE FUNCTION func_AVGLuongPB (@MAPHG varchar(2)) RETURNS numberic(18,0) AS BEGIN declare @LUONGTB select MAPHG,MANV, @LUONGTB = AVG(Luong) from NHANVIEN inner join PHONGBAN on NHANVIEN.PHG=PHONGBAN.MAPHG RETURNS @LUONGTB END 6.2 Viết hàm trả tổng lương nhận nhân viên theo dự án (truyền vào MaNV MaDA) CREATE FUNCTION func_TONGLUONG (@MANV varchar(9),@MADA varchar(2) RETURNS numberic(18,0) AS BEGIN declare @TONGLUONG select MANV,MADA , @TONGLUONG = sum(LUONG) from (DEAN as DA inner join PHANCONG as PC on DA.MADA = PC.SODA) inner join NHANVIEN as NV ON PC.MA_NVIEN = NV.MANV RETURNS @TONGLUONG END 6.3 Viết hàm trả tổng tiền lương trung bình phòng ban CREATE FUNCTION func_AVGLuongPB (@MAPHG varchar(2)) RETURNS numberic(18,0) AS BEGIN declare @LUONGTB select MAPB,MANV,@LUONGTB = AVG(Luong) from NHANVIEN inner join PHONGBAN on NHANVIEN.PHG=PHONGBAN.MAPHG group by MAPHG RETURNS @LUONGTB END 6.4 Viết hàm trả tổng tiền thưởng cho nhân viên dựa vào tổng số tham gia dự án(Time_Total) sau: - Nếu Time_Total >=30 60 =100 =150 tổng tiền thưởng = 1600 ($) CREATE FUNCTION func_ThuongNhanVien(@MANV varchar(9)) RETURNS @ThuongNhanVien TABLE (MANV INT NOT NULL, HONV nvarchar(30), TENLOT nvarchar(30), TENNV nvarchar(30) , TIENTHUONG numberic(18,0) , SOGIOLAM numberic(18,0) ) AS BEGIN DECLARE @SoGioLam numberic(18,0) DECLARE @TienThuong numberic(18,0) SELECT @SoGioLam = MAX(THOIGIAN) FROM PHANCONG WHERE MA_NVIEN = @MANV IF @SoGioLam >= 30 AND @SoGioLam 60 AND @SoGioLam = 100 AND @SoGioLam < 150 BEGIN SET @TienThuong = 1200 END ELSE IF @SoGioLam >= 150 BEGIN SET @TienThuong = 1600 END INSERT @ThuongNhanVien SELECT nv.MANV,nv.HONV,nv.TENLOT,nv.TENNV,@TienThuong,@SoGioLam FROM NHANVIEN nv INNER JOIN DUAN da ON nv.MANV = da.MA_NVIEN WHERE nv.MANV = @MANV RETURN END GO 6.5 Viết hàm trả tổng số dự án theo phòng ban 6.6 Viết hàm trả kết bảng (Table), viết hai cách: Inline Table-Valued Functions Multistatement Table-Valued Thông tin gồm: MaNV, HoTen, NgaySinh, NguoiThan, TongLuongTB ... =1200($) - Nếu Time_Total >=150 tổng tiền thưởng = 1600 ($) CREATE FUNCTION func_ThuongNhanVien(@MANV varchar(9)) RETURNS @ThuongNhanVien TABLE (MANV INT NOT NULL, HONV nvarchar(30), TENLOT nvarchar(30),... nhân viên dựa vào tổng số tham gia dự án(Time_Total) sau: - Nếu Time_Total >=30 60 =100