2015年4月2日 星期四

[T-SQL] TRIGGER 退選

CREATE TRIGGER trigger_instead退選
ON 選修
INSTEAD OF DELETE
AS
DECLARE @可否刪除 INT=0
DECLARE @有無此學生 INT=0
DECLARE @有無此課程 INT=0
DECLARE @低於學分底線 INT=0
DECLARE @退選底線人數 INT=0
SET @可否刪除 = (SELECT count(*) FROM 選修,deleted
WHERE 選修.學生代號=deleted.學生代號 AND 選修.課程代號=deleted.課程代號)

SET @低於學分底線 = (SELECT SUM(科目學分數) FROM 選修,課程,科目,deleted
WHERE 選修.課程代號=課程.課程代號 AND 課程.科目代號=科目.科目代號 AND 選修.學生代號=deleted.學生代號)

SET @退選底線人數 = (SELECT COUNT(*) FROM 選修,deleted WHERE  選修.課程代號=deleted.課程代號)

SET @有無此學生=(SELECT COUNT(*) FROM 選修,deleted WHERE 選修.學生代號=deleted.學生代號 )
SET @有無此課程=(SELECT COUNT(*) FROM 選修,deleted WHERE 選修.課程代號=deleted.課程代號 )

IF (@有無此學生>1 AND @有無此課程>1)
BEGIN
     IF @可否刪除=1
          BEGIN
    IF (@低於學分底線-4)>5
IF @退選底線人數<3
   PRINT '低於退選底線人數 無法退選!'
ELSE
      BEGIN
    DELETE 選修 WHERE 選修.學生代號=(SELECT 學生代號 FROM deleted)
    AND 選修.課程代號=(SELECT 課程代號 FROM deleted)
  END
             ELSE
   PRINT '學分數低於下限 無法退選!'
  END
      ELSE
      PRINT '該學生沒選此課程!'
END
ELSE
  PRINT '查無此學生 or 查無此課程'
GO

2 則留言:

歡迎指教!~