一、觸發器實驗
注意:把studentmanager資料庫中的所有錶用select into命令複製乙份,然後用複製後新錶完成下面的實驗,同時,對每個觸發器都要進行驗證。
select * into department2 from department
select * into class2 from class
select * into course2 from course
select * into s_c2 from s_c
select * into student2 from student
select * into teacher2 from teacher
select * into t_c2 from t_c
1、使用sql語句建立dml觸發器
(1)建立觸發器ts_***,在錄入學生資訊時用以約束性別的值只能是「男」或者「女」
create trigger ts_***
on student2
after insert
asif exists(select * from student2 where s_*** not in('男','女'))
begin
raiserror ('學生性別只能為「男」或者「女」',16,1)
rollback transaction
endinsert into student2
values('2016020203','whp','男',null,null,null,null,'20160101')
(2)建立觸發器ts_name,用來控制不能更新「姓名」列
create trigger ts_name
on student2
for update
asif(update(s_name))
begin
print'禁止更新性名列'
rollback transaction
endupdate student2
set s_name='ghnhj'
(3)建立觸發器ts1,在錄入學生資訊時同時將此學生的學號及大學英語課程號錄入到成績表中(大學英語是公共必修課),同時顯示錄入的記錄資訊。
create trigger ts1
on student2
after insert
asbegin
declare @sno char(10),@cno char(10)
select @sno=s_id from inserted
select @cno=course_id from course where course_name='大學英語'
insert into s_c values(@sno,@cno,null)
select * from s_c where s_id =@sno
endinsert into student2
values('2016020103','whp','男',null,null,null,null,'20160101')
(4)建立觸發器ts2,在刪除乙個畢業生的資訊的同時刪除這個學生的成績記錄。如果沒有此學生則給出提示資訊。
create trigger ts2
on student2
after delete
asbegin
if exists(select s_id from deleted)
begin
delete from s_c
where s_id=(select s_id from deleted)
select * from student2
endelse
print '不存在此學生資訊'
enddelete from student2 where s_id ='2016020104'
(5)建立觸發器ts3,當更新某個學生的學號時更新這個學生的選課資訊。
create trigger ts3
on student2
after update
asbegin
if exists(select s_id from deleted)
begin
update s_c2 set s_id =(select s_id from inserted)
where s_id =(select s_id from deleted)
select s.s_id,s_name,result
from student2 s,s_c2 sc
where s.s_id=sc.s_id and s.s_id=(select s_id from inserted)
select * from s_c2
end
else
print '沒有這個學生的選課記錄'
endupdate student set s_id='2016010106' where s_id ='2016010105'
(6)建立觸發器ts4,在向學生表插入、更新記錄時檢測出生日期與註冊日期的合法性,即出生日期應早於註冊日期,若不合法給出提示,並撤銷此操作。
create trigger ts4
on student2
after insert,update
asbegin
declare @date0 smalldatetime
declare @date1 smalldatetime
set @date0=(select s_borndate from inserted)
set @date1=(select s_enrolldate from inserted)
if @date0 > @date1
print'出生日期大於註冊日期,拒絕操作'
rollback transaction
endupdate student2 set s_borndate='1983-05-03' where s_id='2016010101'
解除安裝sql server 2012
好不容易裝上了sql server2012資料庫,可是卻不能連線本地的資料庫,後來發現缺少一些服務,於是決定重新安裝,但是解除安裝卻很麻煩,如果解除安裝不乾淨的話,重新安裝會出問題,所以下面就總結一些方法 在解除安裝sql server 2012後,大家都希望能夠將登錄檔資訊完全刪乾淨,下面就將教您...
SQLServer 2012 高效分頁
sql code 功能 生成測試資料.create table test paging id int identity 1,1 not null primary key,testnumber int not null,testname varchar 20 not null,testdept var...
SQL Server2012中的Throw語句
簡 介sql server2012實現了 類似c 丟擲異常的 throw 語句。相比較於 sqlserver2005 之前使用 error,和sqlserver2005 之後使用 raiserror 引發 異常都是乙個不小的 進步,下面來看一下 throw 的用法。raiserror 和throw ...