存儲過程與觸發器的區別

1、存儲過程
是 SQL 語句和可選控制流語句的預編譯集合,以一個名稱存儲並做爲一個單元處理。存儲過程存儲在數據庫內,可由應用程序經過一個調用執行,並且容許用戶聲明變量、有條件執行以及其它強大的編程功能。
存儲過程可包含程序流、邏輯以及對數據庫的查詢。它們能夠接受參數、輸出參數、返回單個或多個結果集以及返回值。
能夠出於任何使用 SQL 語句的目的來使用存儲過程,它具備如下優勢:
1.能夠在單個存儲過程當中執行一系列 SQL 語句。
2.能夠從本身的存儲過程內引用其它存儲過程,這能夠簡化一系列複雜語句。
3.存儲過程在建立時即在服務器上進行編譯,因此執行起來比單個 SQL 語句快。

2、觸發器
是一種特殊類型的存儲過程,當使用下面的一種或多種數據修改操做在指定表中對數據進行修改時,觸發器會生效:UPDATE、INSERT 或 DELETE。觸發器能夠查詢其它表,並且能夠包含複雜的 SQL 語句。它們主要用於強制複雜的業務規則或要求。例如,能夠控制是否容許基於顧客的當前賬戶狀態插入定單。
觸發器還有助於強制引用完整性,以便在添加、更新或刪除表中的行時保留表之間已定義的關係。然而,強制引用完整性的最好方法是在相關表中定義主鍵和外鍵約束。若是使用數據庫關係圖,則能夠在表之間建立關係以自動建立外鍵約束。有關詳細信息,請參見表關係。
觸發器的優勢以下:
 數據庫

1.觸發器是自動的:它們在對錶的數據做了任何修改(好比手工輸入或者應用程序採起的操做)以後當即被激活。
2.觸發器能夠經過數據庫中的相關表進行層疊更改。例如,能夠在 titles 表的 title_id 列上寫入一個刪除觸發器,以使其它表中的各匹配行採起刪除操做。該觸發器用 title_id 列做爲惟一鍵,在 titleauthor、sales 及 roysched 表中對各匹配行進行定位。
3.觸發器能夠強制限制,這些限制比用 CHECK 約束所定義的更復雜。與 CHECK 約束不一樣的是,觸發器能夠引用其它表中的列。例如,觸發器能夠回滾試圖對價格低於 10 美圓的書(存儲在 titles 表中)應用折扣(存儲在 discounts 表中)的更新。

簡單來講:
1.存儲過程是保存起來的能夠接受和返回用戶提供的參數的   Transact-SQL   語句的集合. 存儲過程單獨存在於數據庫中,須要手工調用  。  
2.觸發器是一種特殊的存儲過程,在用戶試圖對指定的表執行指定的數據修改語句時自動執行。 容許爲任何給定的   INSERT、UPDATE   或   DELETE   語句建立多個觸發器。 觸發器依賴於庫中的某個表而存在,當表中的數據發生變化時,自動觸發觸發器工做。
相關文章
相關標籤/搜索