更新時間:2021-06-21 18:16:47作者:admin2
存儲過程就是一個sql的程序集 可以包含多個SQL語句 并可以附帶各種邏輯判斷及處理觸發(fā)器 就類似于程序里的事件觸發(fā)只是這里通常是某個字段的改變 某個表插入了數(shù)據(jù) 或者刪除某些數(shù)據(jù) 以上這些處理引發(fā)的另外一些表數(shù)據(jù)的改變
所謂存儲過程,是一組預(yù)編譯的Transact-SQL語句,存儲在SQL Server中,被作為一種數(shù)據(jù)庫對象保存起來。存儲過程的執(zhí)行不是在客戶端而是在服務(wù)器端(執(zhí)行速度快)。存儲過程可以是一條簡單的Transact-SQL語句,也可以是復(fù)雜的Transact-SQL語句和流程控制語句的集合。在使用Transact-SQL語言編程的過程中,我們可以將某些需要多次調(diào)用的實現(xiàn)某個特定任務(wù)的代碼段編寫成一個過程,將其保存在數(shù)據(jù)庫中,并由SQL Server服務(wù)器通過過程名來調(diào)用它們,這些過程就叫做存儲過程(也稱為子程序)。 存儲過程在第一次執(zhí)行時進行語法檢查和編譯,編譯好的版本存儲在高速緩存中,用于后續(xù)調(diào)用,下次調(diào)用時可以直接執(zhí)行。存儲過程的特點: 存儲過程可以接受輸入?yún)?shù),并且可以用輸出參數(shù)的形式返回值。存儲過程可以包含復(fù)雜的流控制語句。 存儲過程建立好以后可以被反復(fù)調(diào)用。一個存儲過程可以調(diào)用另一個存儲過程,嵌套調(diào)用可多達32級。 由于存儲過程在建立和第一次執(zhí)行的時候被解析、優(yōu)化、編譯和緩存(駐留在高速緩沖存儲器中),因此其執(zhí)行速度比直接向SQL Server發(fā)送T-SQL語句快。 存儲過程的執(zhí)行是通過一條語句來完成的,避免了網(wǎng)絡(luò)上服務(wù)器和客戶機之間大量Transact-SQL語句的傳送,降低了網(wǎng)絡(luò)的通信量。 存儲過程可以被看作一種安全機制,即使用戶沒有對表或視圖的訪問權(quán)限,他們也可以被授予執(zhí)行對表或視圖進行訪問的存儲過程的權(quán)限。、、、、、、、、、、、、、、、、、、、、、、、、、、、觸發(fā)器的作用 在指定的表中數(shù)據(jù)發(fā)生變化時被調(diào)用以響應(yīng)INSERT、UPDATE或DELETE事件。 用于保護表中的數(shù)據(jù),當(dāng)有操作影響到觸發(fā)器保護的數(shù)據(jù)時,觸發(fā)器自動強制執(zhí)行業(yè)務(wù)規(guī)則。 利用觸發(fā)器可以方便地實現(xiàn)數(shù)據(jù)庫中的數(shù)據(jù)完整性。一般的存儲過程通過存儲過程名稱被直接調(diào)用,而觸發(fā)器主要是通過事件進行觸發(fā)而被執(zhí)行(對表或視圖發(fā)出update、insert、delete語句)。 觸發(fā)器是一個功能強大的工具,它與表格緊密相連,在表中數(shù)據(jù)發(fā)生變化時自動強制執(zhí)行。觸發(fā)器可以用于SQL Server約束、默認值和規(guī)則的完整性檢查,還可以完成難以用普通約束實現(xiàn)的復(fù)雜功能。 觸發(fā)器的優(yōu)點觸發(fā)器是自動的執(zhí)行的(往表里插入、修改、刪除時被自動激活,從而防止對數(shù)據(jù)的不正確修改)。觸發(fā)器是基于一個表創(chuàng)建的,但可以針對多個表進行操作,實現(xiàn)數(shù)據(jù)庫中的相關(guān)表進行層疊更改。觸發(fā)器可以實現(xiàn)比 check約束更為復(fù)雜的數(shù)據(jù)完整性約束。一個表中可以同時存在三個不同操作的觸發(fā)器,對于同一個修改語句可以有多個不同的對策以響應(yīng)。