You are on page 1of 10

BÀI THỰC HÀNH 02 – MÔN QUẢN LÝ THÔNG TIN

Sinh Viên: Lâm Trường Sơn. MSSV: 19522133

CREATE DATABASE QL_DETAI

GO

USE QL_DETAI

GO

CREATE TABLE SINHVIEN (

MSSV CHAR(8) NOT NULL PRIMARY KEY,

TENSV NVARCHAR(30) NOT NULL,

SODT VARCHAR(10),

LOP CHAR(10) NOT NULL,

DIACHI NCHAR(50) NOT NULL

CREATE TABLE DETAI (

MSDT CHAR(6) NOT NULL PRIMARY KEY,

TENDT NVARCHAR(30) NOT NULL,

CREATE TABLE SV_DETAI (

MSSV CHAR(8) REFERENCES SINHVIEN(MSSV),

MSDT CHAR(6) REFERENCES DETAI(MSDT),

CREATE TABLE HOCHAM (

MSHH INT PRIMARY KEY,

TENHH NVARCHAR(20) NOT NULL,

CREATE TABLE GIAOVIEN (

MSGV INT NOT NULL PRIMARY KEY,

TENGV NVARCHAR(30) NOT NULL,

DIACHI NVARCHAR(50) NOT NULL,


SODT VARCHAR(10) NOT NULL,

MSHH INT REFERENCES HOCHAM(MSHH),

NAMHH SMALLDATETIME NOT NULL,

CREATE TABLE HOCVI(

MSHV INT PRIMARY KEY,

TENHV NVARCHAR(30) NOT NULL,

CREATE TABLE CHUYENNGANH (

MSCN INT PRIMARY KEY,

TENCN NVARCHAR(30) NOT NULL,

CREATE TABLE GV_HV_CN (

MSGV INT REFERENCES GIAOVIEN(MSGV),

MSHV INT REFERENCES HOCVI(MSHV),

MSCN INT REFERENCES CHUYENNGANH(MSCN),

NAM SMALLDATETIME NOT NULL,

PRIMARY KEY(MSGV, MSHV, MSCN)

CREATE TABLE GV_HDDT (

MSGV INT REFERENCES GIAOVIEN(MSGV),

MSDT CHAR(6) REFERENCES DETAI(MSDT),

DIEM FLOAT NOT NULL,

PRIMARY KEY (MSGV, MSDT)

CREATE TABLE GV_PBDT (

MSGV INT REFERENCES GIAOVIEN(MSGV),

MSDT CHAR(6) REFERENCES DETAI(MSDT),


DIEM FLOAT NOT NULL,

PRIMARY KEY (MSGV, MSDT)

CREATE TABLE GV_UVDT (

MSGV INT REFERENCES GIAOVIEN(MSGV),

MSDT CHAR(6) REFERENCES DETAI(MSDT),

DIEM FLOAT NOT NULL,

PRIMARY KEY (MSGV, MSDT)

CREATE TABLE HOIDONG (

MSHD INT PRIMARY KEY,

PHONG INT,

TGBD SMALLDATETIME,

NGAYHD SMALLDATETIME,

TINHTRANG NVARCHAR(30) NOT NULL,

MSGV INT REFERENCES GIAOVIEN(MSGV),

CREATE TABLE HOIDONG_GV (

MSHD INT REFERENCES HOIDONG(MSHD),

MSGV INT REFERENCES GIAOVIEN(MSGV),

PRIMARY KEY (MSHD, MSGV)

CREATE TABLE HOIDONG_DT (

MSHD INT REFERENCES HOIDONG(MSHD),

MSDT CHAR(6) REFERENCES DETAI(MSDT),

QUYETDINH NCHAR(10),

PRIMARY KEY (MSHD, MSDT)

--- A. STORED PROCEDUREDS VỚI THAM SỐ VÀO


--- CAU 1

CREATE PROCEDURE ADD_GV @MSGV INT, @TENGV NVARCHAR(30),@SODT VARCHAR(10), @DIACHI


NVARCHAR(50), @MSHH INT, @NAMHH SMALLDATETIME

AS BEGIN

IF EXISTS (SELECT * FROM HOCHAM WHERE MSHH = @MSHH)

PRINT '0'

ELSE

INSERT INTO GIAOVIEN(MSGV, TENGV, DIACHI, SODT, MSHH, NAMHH) VALUES (@MSGV,
@TENGV, @DIACHI, @SODT, @MSHH, @NAMHH)

END

GO

--- CAU 2

CREATE PROCEDURE ADD_GIAOVIEN @MSGV INT, @TENGV NVARCHAR(30),@SODT VARCHAR(10),


@DIACHI NVARCHAR(50), @MSHH INT, @NAMHH SMALLDATETIME

AS BEGIN

IF EXISTS (SELECT * FROM GIAOVIEN WHERE MSGV = @MSGV)

PRINT '0'

ELSE

INSERT INTO GIAOVIEN(MSGV, TENGV, DIACHI, SODT, MSHH, NAMHH) VALUES (@MSGV,
@TENGV, @DIACHI, @SODT, @MSHH, @NAMHH)

END

GO

--- CAU 3

CREATE PROCEDURE ADD_GV_CAU3 @MSGV INT, @TENGV NVARCHAR(30),@SODT VARCHAR(10),


@DIACHI NVARCHAR(50), @MSHH INT, @NAMHH SMALLDATETIME

AS BEGIN

IF EXISTS (SELECT * FROM GIAOVIEN WHERE MSGV = @MSGV)

PRINT '0'

ELSE IF EXISTS (SELECT * FROM HOCHAM WHERE MSHH = @MSHH)

PRINT '1'
ELSE

INSERT INTO GIAOVIEN(MSGV, TENGV, DIACHI, SODT, MSHH, NAMHH) VALUES (@MSGV,
@TENGV, @DIACHI, @SODT, @MSHH, @NAMHH)

END

GO

--- CAU 4

CREATE PROCEDURE UPDATE_DETAI_CAU4 @MSDT CHAR(6), @TENDT NVARCHAR(30)

AS BEGIN

IF NOT EXISTS (SELECT * FROM DETAI WHERE @MSDT = MSDT)

PRINT '0'

ELSE

UPDATE DETAI

SET TENDT = @TENDT

WHERE MSDT = @MSDT

PRINT '1'

END

GO

--- CAU 5

CREATE PROCEDURE UPDATE_SINHVIEN_CAU5 @MSSV CHAR(8), @TENSV NVARCHAR(30), @DIACHI


NCHAR(50)

AS BEGIN

IF NOT EXISTS (SELECT * FROM SINHVIEN WHERE @MSSV = MSSV)

PRINT '0'

ELSE

UPDATE SINHVIEN

SET TENSV = @TENSV, DIACHI = @DIACHI

WHERE MSSV = @MSSV

PRINT '1'

END
GO

--- B. STORED PROCEDUREDS VỚI THAM SỐ VÀO VÀ RA

--- CAU 1

CREATE PROCEDURE SOHOCVI_CAU1 @TENHV NVARCHAR(20), @GV_COUNT INT OUTPUT

AS BEGIN

SET @GV_COUNT = 0

SELECT @GV_COUNT = COUNT(MSGV) FROM GV_HV_CN INNER JOIN HOCVI ON


GV_HV_CN.MSHV = HOCVI.MSHV

WHERE TENHV = @TENHV

END

GO

DECLARE @GV_COUNT INT

EXEC SOHOCVI_CAU1 N'Kỹ Sư', @GV_COUNT OUTPUT

PRINT @GV_COUNT

GO

--- CAU 2

CREATE PROCEDURE AVG_SCORE @MSDT CHAR(6), @SCORE FLOAT OUTPUT

AS BEGIN

SET @SCORE = 0

DECLARE @DTB1 FLOAT, @DTB2 FLOAT, @DTB3 FLOAT, @NUM1 INT, @NUM2 INT, @NUM3
INT

SET @DTB1 = 0

SET @DTB2 = 0

SET @DTB3 = 0

SET @NUM1 = 0

SET @NUM2 = 0

SET @NUM3 = 0
SELECT @DTB1 = SUM(DIEM) FROM GV_HDDT WHERE @MSDT = MSDT

SELECT @DTB2 = SUM(DIEM) FROM GV_PBDT WHERE @MSDT = MSDT

SELECT @DTB3 = SUM(DIEM) FROM GV_UVDT WHERE @MSDT = MSDT

SELECT @NUM1 = COUNT(MSDT) FROM GV_HDDT WHERE MSDT = @MSDT

SELECT @NUM2 = COUNT(MSDT) FROM GV_PBDT WHERE MSDT = @MSDT

SELECT @NUM3 = COUNT(MSDT) FROM GV_UVDT WHERE MSDT = @MSDT

SET @SCORE = (@DTB1 + @DTB2 + @DTB3) / (@NUM1 + @NUM2 + @NUM3)

IF (@SCORE IS NULL )

BEGIN

SET @SCORE = 0

END

END

GO

DECLARE @SCORE FLOAT

EXEC AVG_SCORE '97005', @SCORE OUTPUT

PRINT @SCORE

GO

--- CAU 4

CREATE PROCEDURE CAU4 @MSHD INT, @TENCTHD NVARCHAR(30) OUTPUT, @SDT VARCHAR(10)
OUTPUT

AS BEGIN

IF NOT EXISTS (SELECT * FROM HOIDONG WHERE @MSHD = MSHD)

PRINT '0'

ELSE

SELECT @TENCTHD = TENGV FROM GIAOVIEN INNER JOIN HOIDONG ON


GIAOVIEN.MSGV = HOIDONG.MSGV

SELECT @SDT = SODT FROM GIAOVIEN INNER JOIN HOIDONG ON GIAOVIEN.MSGV =


HOIDONG.MSGV

END

GO
DECLARE @TENCTHD NVARCHAR(30), @SDT VARCHAR(10)

EXEC CAU4 1, @TENCTHD OUTPUT, @SDT OUTPUT

GO

--- TRIGGER

--- CAU 1

CREATE TRIGGER CAU1 ON DETAI

INSTEAD OF DELETE

AS BEGIN

DECLARE @MSDT CHAR(6)

SELECT @MSDT = MSDT FROM deleted

DELETE FROM SV_DETAI WHERE @MSDT = MSDT

DELETE FROM GV_HDDT WHERE @MSDT = MSDT

DELETE FROM GV_PBDT WHERE @MSDT = MSDT

DELETE FROM GV_UVDT WHERE @MSDT = MSDT

DELETE FROM HOIDONG_DT WHERE @MSDT = MSDT

END

GO

-- CAU 2

CREATE TRIGGER CAU2 ON GIAOVIEN

FOR UPDATE

AS BEGIN

DECLARE @MSGV INT

SELECT @MSGV = MSGV FROM inserted

UPDATE GV_HV_CN SET MSGV = @MSGV

UPDATE GV_HDDT SET MSGV = @MSGV

UPDATE GV_PBDT SET MSGV = @MSGV

UPDATE GV_UVDT SET MSGV = @MSGV

UPDATE HOIDONG SET MSGV = @MSGV

UPDATE HOIDONG_GV SET MSGV = @MSGV


END

GO

--- CAU 3

CREATE TRIGGER CAU3 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

--- CAU 5

CREATE TRIGGER TG_KIEMTRA_GIAO_VIEN

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

UPDATE GIAOVIEN SET MSHH = 1 WHERE MSGV = 00201

insert into GV_HV_CN VALUES(00201, 4, 3, 2018)

delete GV_HV_CN where NAM = 2018

You might also like