今日學習有關知識時長:78分鐘
程式碼行數:80行
發表部落格數量:1篇
今日學習的內容主要是有關資料庫操作中的觸發器和儲存過程。
觸發器(trigger)就相當於事件繫結,當你進行某類sql語句操作時將會自動呼叫你你所設定的觸發器來進行操作。
儲存過程(procedure)就相當於我們Java中的方法,可以帶有引數和返回值,可以在儲存過程中設定多條語句,呼叫儲存過程就相當於自動呼叫這些語句。呼叫時可以直接使用exec+儲存器名稱+引數。
--建立 course 與 sc 表間來維護參照完整性而使用的一個級聯刪除觸發器、一個級聯修改觸發器和一個受限插入觸發器。 create trigger trg_CascadeDelete on Course --級聯刪除觸發器 for delete as begin delete from sc where Cno in(select Cno from deleted) end; go create trigger trg_CascadeUpdate on Course --級聯修改觸發器 for update as begin if update(Cno) begin declare @OldCno char(10),@NewCno char(10); select @OldCno=Cno from deleted; select @NewCno=Cno from inserted; update SC set Cno=@NewCno where Cno=@OldCno; end end; go create trigger trg_RestrictInsert ON SC --受限插入觸發器 for insert as begin if exists(select * from inserted where Cno not in(Select Cno from Course)) begin raiserror('該課程號不存在',16,1); rollback transaction; end end; go --統計成績 60 分以下的人數 create procedure UnderSixty as begin select count(*) 低於60分的人數 from sc where Grade<60; end; exec UnderSixty; go --統計給定 cno 的課程的平均成績,並返回平均成績 create procedure CourseAvgGrade(@Cno char(10),@Avg float output) as begin select @Avg=avg(Grade) from sc where Cno=@Cno; end; declare @avggrade float exec CourseAvgGrade '1',@avggrade select @avggrade as 平均分; go --將 sc 表中 grade 從百分制改為等級制(5、4、3、2、1)。即 0-20 分為 1,21-40為 2,4 1-60 為 3,61-80 為 4,81-100 為 5。 create procedure Grades as begin update sc set Grade= case when Grade between 81 and 100 then 5 when Grade between 61 and 80 then 4 when Grade between 41 and 60 then 3 when Grade between 21 and 40 then 2 when Grade between 0 and 20 then 1 else Grade end end; exec Grades;