SqlServer2012例項之觸發器的建立

2021-08-20 09:19:31 字數 2990 閱讀 8282

一、觸發器實驗

注意:把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 ...