Professional Documents
Culture Documents
---2.Tham số vào là MSGV, TENGV, SODT, DIACHI, MSHH, NAMHH.Trước khi insert dữ liệu cần
kiểm tra MSGV trong table GIAOVIEN có trùng không, nếu trùng trả về 0.
---3.Giống (1) và (2) kiểm tra xem MSGV có trùng không? MSHH có tồn tại chưa Nếu MSGV
trùng thì trả về 0. Nếu MSHH trùng thì trả về 1, ngược lại insert dữ liệu.
CREATE PROCEDURE procedureCau3
@msgv int, @tengv nvarchar(30), @diachi nvarchar(50), @sodt varchar(10),@mshh int,
@namhh smalldatetime
AS
BEGIN
DECLARE @msgv_kt int, @mshh_kt int
BEGIN
SELECT @msgv_kt = MSGV FROM GIAOVIEN WHERE MSGV = @MSGV
SELECT @mshh_kt = MSHH FROM HOCHAM WHERE MSHH = @mshh
IF(@msgv_kt IS NOT NULL)
PRINT '0'
ELSE IF(@mshh_kt IS NULL)
PRINT '1'
ELSE
BEGIN
INSERT INTO GIAOVIEN VALUES (@msgv, @tengv, @diachi, @sodt,
@mshh, @namhh)
PRINT 'SUCCESSFULLY!'
END
END
END
---4.Đưa vào MSDT cũ, TENDT mới. Hãy cập nhật tên đề tài mới với mã đề tài cũ không đổi
nếu tìm không tìm thấy trả về 0, ngược lại trả về 1.
CREATE PROCEDURE ProcedureCau4 @msdt char(6), @tendt nvarchar(30)
AS
BEGIN
DECLARE @msdt_kt nvarchar(30)
select @msdt_kt = MSDT from DETAI where MSDT = @msdt
if(@msdt_kt is null)
print '0'
else
begin
update DETAI
set TENDT = @tendt
WHERE MSDT = @msdt
return 1
end
END
---5.Tham số đưa vào MSSV, TENSV mới, DIACHI mới thủ lục dùng để cập nhật sinh viên trên,
nếu không tìm thấy trả về 0, ngược lại cập nhật và trả về 1
SET @sogv = 0
SELECT @sogv = COUNT(MSGV) FROM HOCVI A INNER JOIN GV_HV_CN B ON A.MSHV = B.MSHV
WHERE TENHV = @tenhv
END
---2. Đưa vào MSDT cho biết: Điểm trung bình của đề tài, nếu không tìm thấy trả về không
CREATE PROCEDURE ProcedureBCau2
@msdt char(6), @diem float output
AS
BEGIN
DECLARE @diem1 float, @diem2 float, @diem3 float
SET @diem = 0
SELECT @diem1 = avg(DIEM) FROM GV_HDDT WHERE MSDT = @msdt
if (@diem1 is null)
set @diem1 = 0
SELECT @diem2 = avg(DIEM) FROM GV_PBDT WHERE MSDT = @msdt
if (@diem2 is null)
set @diem2 = 0
SELECT @diem3 = avg(DIEM) FROM GV_UVDT WHERE MSDT = @msdt
if (@diem3 is null)
set @diem3 = 0
set @diem = (@diem1 + @diem2 + @diem3) /3
END
--4.Đưa vào MSHD trả ra: Tên chỉ tịch hội đồng và SDT, nếu không tìm thấy trả về 0.
CREATE PROCEDURE ProcedureBCau4
@mshd int, @tencthd nvarchar(30) output, @sdt varchar(10) output
AS
BEGIN
DECLARE @mshd_kt int
select @mshd_kt = MSHD from HOIDONG WHERE MSHD = @mshd
--3. Tạo Trigger thỏa mãn ràng buộc là một hội đồng không quá 10 đề tài. Dùng "Group by"
có được không? Giải thích
CREATE TRIGGER TriggerCau3
ON HOIDONG_DT FOR INSERT
AS
BEGIN
DECLARE @mshd INT
SET @mshd = (SELECT MSHD FROM INSERTED )
IF(SELECT COUNT(*) FROM HOIDONG_DT
WHERE MSHD = @mshd
GROUP BY MSHD) > 10
BEGIN
PRINT 'MOT HOI DONG KHONG QUA 10 DE TAI'
ROLLBACK TRANSACTION
END
END
--5. Tạo trigger thỏa mãn ràng buộc là một giáo viên muốn có học hàm PGS phải là tiến sĩ
-- CẬP NHẬT THEO MSGV
CREATE TRIGGER Tg_ktragiaovien
ON GIAOVIEN FOR UPDATE
AS
BEGIN
DECLARE @mshh INT, @msgv INT, @tenhh NVARCHAR(20)
SET @msgv = (SELECT MSGV FROM INSERTED)
SELECT @mshh = MSHH FROM INSERTED
SELECT @tenhh = TENHH FROM HOCHAM WHERE MSHH = @mshh
IF(@tenhh = N'PHÓ GIÁO SƯ')
BEGIN
DECLARE @mshv_ts INT
SELECT @mshv_ts = MSHV FROM HOCVI WHERE TENHV = N'Tiến sĩ'
IF(@mshv_ts not in (SELECT MSHV FROM GV_HV_CN WHERE MSGV = @msgv))
BEGIN
print N'Học vị không thõa'
ROLLBACK TRANSACTION
END
ELSE PRINT 'THANH CONG'
END
ELSE PRINT 'THANH CONG'
END