觸發器和存儲過程


觸發器存儲過程

1.       存儲過程和觸發器是什么?

存儲過程不能可以顯著提高系統的執行速度,還能提高效率確保一致性.

1.1存儲過程:一種數據庫對象,將負責不同功能的語句分類放置起來,以便能反復使用.

1.2特點:

1.3存儲過程的分類

分為五類,系統存儲過程,用戶定義存儲過程,臨時存儲過程,遠程存儲過程,擴展存儲過程.

臨時存儲過程又分為本地臨時存儲過程,全局臨時存儲過程.

分類

說明

系統存儲過程

存儲在master中,以sp開頭,調用時不必加庫名,如果參數是保留字或者數據庫對象,用單引號包圍.

用戶定義存儲過程

用戶為完成一定的功能定義在數據庫中存儲過程.

臨時存儲過程

本地臨時:#開頭,放在tempdb中,連接斷開之后自動刪除,本庫使用.

全局臨時:##開頭,放在tempdb中,連接斷開后使用完之后自動刪除,本連接的所有庫可以使用.注意命名.

遠程存儲過程

位於遠程服務器上的存儲過程.通過分布式查詢和execute執行.

擴展存儲過程

外部程序寫的存儲過程,xp開頭,動態鏈接庫形式存在,也放在master

1.4存儲過程優點

1.5存儲過程和視圖的比較

 

1.6創建存儲過程

格式:

例子:

create procedure ShowAllStudent

as

begin

select * from students

end

1.7執行存儲過程

格式:exec procedure_name

例子:exec  ShowAllStudent

1.8帶輸入參數存儲過程

格式:

 

例子:

create procedure SelectStudentByStu_no

@sno char(12)='200501020319'

as

begin

select * from students where stu_no=@sno

end

1.9執行帶輸入參數的存儲過程

格式:

 

例子:

exec SelectStudentByStu_no

@sno='200501030218'

當參數比較少的時候,可以按照位置傳遞參數.

例子:

exec SelectStudentByStu_no '200501030218'

1.10帶輸出參數的存儲過程

格式:

 

例子:

create procedure GetStudentCountByStu_sex

@sex char(2)='',

@count int=0 output

as

begin

set

@count=(select count(*) from students where stu_gender=@sex)

print @count

end

 

執行帶輸出參數的存儲過程

例子:

declare @sex char(2) ,@count int

set @sex=''

exec GetStudentCountByStu_sex @sex,@count

1.11    刪除存儲過程

Drop procedure GetPostsByBlogId

1.12      更新存儲過程

alter procedure GetPostsByBlogId

(@blogid varchar(50))

As

Select top 5* from Posts where BlogId=@blogid

1.13      重命名存儲過程

對象瀏覽器中修改.

1.14      重新編譯存儲過程

 有三種方法:

1)創建的時候使用with Recompile 語句.

2)在執行過程中設定重新編譯

3)調用系統存儲過程重新編譯

2.      觸發器

基本表被在修改的時候通過事件觸發而執行的存儲過程.

作用是保證了由主鍵和外鍵所不能保證的參照完整性和數據完整性.

2.1觸發器的優點

觸發器可以包含復雜的處理邏輯,主要用來保持低級的數據完整性.優點如下.

 

2.2創建觸發器

刪除觸發器:

例子:

create trigger dropStudent

on students

for delete

as

print '成功刪除一條數據.'

更新觸發器:

create trigger updateStudentName

on students

for update

as

if update (stu_name)

begin

print '不能更新主鍵,學生號碼.'

rollback transaction

end

 

update students set

stu_name='五哥'

where stu_no='200501020319'

 

刪除觸發器:略

查看觸發器:

1)    

使用系統的存儲過程查看: exec sp_helptrigger students 

使用系統表: select name from sysobjects where type='TR'

 

2)     管理器查看 略

刪除觸發器: drop trigger updateStudent

修改觸發器:

 重命名: sp_rename dropStudent,deleteStudentItem

啟動和停止觸發器:

alter table students enable trigger all


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM