事務(wù)是為保證流程完整性,例如:銀行轉(zhuǎn)賬
觸發(fā)器是一種特殊存儲過程,增刪改可以指定觸發(fā)條件,例如:用戶表和相關(guān)的工資表
存儲過程可以說是一個記錄集,它是由一些T-SQL語句組成的代碼塊,這些T-SQL語句代碼像一個方法一樣實現(xiàn)一些功能(對單表或多表的增刪改查),然后再給這個代碼塊取一個名字,在用到這個功能的時候調(diào)用他就行了。
存儲過程的好處:
1.由于數(shù)據(jù)庫執(zhí)行動作時,是先編譯后執(zhí)行的。然而存儲過程是一個編譯過的代碼塊,所以執(zhí)行效率要比T-SQL語句高。
2.一個存儲過程在程序在網(wǎng)絡(luò)中交互時可以替代大堆的T-SQL語句,所以也能降低網(wǎng)絡(luò)的通信量,提高通信速率。
3.通過存儲過程能夠使沒有權(quán)限的用戶在控制之下間接地存取數(shù)據(jù)庫,從而確保數(shù)據(jù)的安全。
- 存儲過程是應用程序的邏輯處理單元,可以共享給多個應用程序,確保了數(shù)據(jù)訪問和操作的一致性,提高了程序的維護性。只修改存儲過程不用更新應用程序。
2.創(chuàng)建存儲過程,會對其進行語法分析,并且存儲在系統(tǒng)表syspbjects 和 syscomments。第一次執(zhí)行會進行優(yōu)化和編譯,并且存儲在高速緩存中。之后的調(diào)用就直接調(diào)取緩存中的,不需要再次編譯。從而提高系統(tǒng)的執(zhí)行效率。
3.存儲過程也可以確保操作的完整性,如果用戶被授權(quán)允許調(diào)用該存儲過程,即使用戶沒有權(quán)限訪問存儲過程中所參考的表和視圖,也可以完全執(zhí)行該存儲過程。
4.存儲過程是存放在系統(tǒng)服務(wù)器上的,調(diào)用只需要傳送一條命令即可,減少流量的消耗。
sql中的存儲過程及相關(guān)介紹:
CREATE PROCEDURE [擁有者.]存儲過程名[;程序編號]
[(參數(shù)#1,…參數(shù)#1024)]
[WITH
{RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION}
]
[FOR REPLICATION]
AS 程序行
其中存儲過程名不能超過128個字。每個存儲過程中最多設(shè)定1024個參數(shù)
例子:
CREATE PROCEDURE order_tot_amt
@o_id int,
@p_tot int output
AS
SELECT @p_tot = sum(Unitprice*Quantity)
FROM orderdetails
WHERE orderid=@o_id
GO
--------------創(chuàng)建存儲過程-----------------
CREATE PROC [ EDURE ] procedure_name [ ; number ]
[ { @parameter data_type }
[ VARYING ] [ = default ] [ OUTPUT ]
] [ ,...n ]
[ WITH
{ RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ]
[ FOR REPLICATION ]
AS sql_statement [ ...n ]
--------------調(diào)用存儲過程-----------------
EXECUTE Procedure_name '' --存儲過程如果有參數(shù),后面加參數(shù)格式為:@參數(shù)名=value,也可直接為參數(shù)值value
--------------刪除存儲過程-----------------
drop procedure procedure_name --在存儲過程中能調(diào)用另外一個存儲過程,而不能刪除另外一個存儲過程
--------------查看存儲過程-----------------
show create procedure procedure_name --查看創(chuàng)建存儲過程的
創(chuàng)建存儲過程的參數(shù):
1.procedure_name :存儲過程的名稱,在前面加#為局部臨時存儲過程,加##為全局臨時存儲過程。
2.; number:是可選的整數(shù),用來對同名的過程分組,以便用一條 DROP PROCEDURE 語句即可將同組的過程一起除去。例如,名為 orders 的應用程序使用的過程可以命名為 orderproc;1、orderproc;2 等。DROP PROCEDURE orderproc 語句將除去整個組。如果名稱中包含定界標識符,則數(shù)字不應包含在標識符中,只應在 procedure_name 前后使用適當?shù)亩ń绶?br>
3.@parameter: 存儲過程的參數(shù)??梢杂幸粋€或多個。用戶必須在執(zhí)行過程時提供每個所聲明參數(shù)的值(除非定義了該參數(shù)的默認值)。存儲過程最多可以有 2.100 個參數(shù)。
使用 @ 符號作為第一個字符來指定參數(shù)名稱。參數(shù)名稱必須符合標識符的規(guī)則。每個過程的參數(shù)僅用于該過程本身;相同的參數(shù)名稱可以用在其它過程中。默認情況下,參數(shù)只能代替常量,而不能用于代替表名、列名或其它數(shù)據(jù)庫對象的名稱。有關(guān)更多信息,請參見 EXECUTE。
4.data_type:參數(shù)的數(shù)據(jù)類型。所有數(shù)據(jù)類型(包括 text、ntext 和 image)均可以用作存儲過程的參數(shù)。不過,cursor 數(shù)據(jù)類型只能用于 OUTPUT 參數(shù)。如果指定的數(shù)據(jù)類型為 cursor,也必須同時指定 VARYING 和 OUTPUT 關(guān)鍵字。有關(guān) SQL Server 提供的數(shù)據(jù)類型及其語法的更多信息,請參見數(shù)據(jù)類型。
說明 對于可以是 cursor 數(shù)據(jù)類型的輸出參數(shù),沒有最大數(shù)目的限制。
5.VARYING: 指定作為輸出參數(shù)支持的結(jié)果集(由存儲過程動態(tài)構(gòu)造,內(nèi)容可以變化)。僅適用于游標參數(shù)。
6.default: 參數(shù)的默認值。如果定義了默認值,不必指定該參數(shù)的值即可執(zhí)行過程。默認值必須是常量或 NULL。如果過程將對該參數(shù)使用 LIKE 關(guān)鍵字,那么默認值中可以包含通配符(%、_、[] 和 [^])。
7.OUTPUT :表明參數(shù)是返回參數(shù)。該選項的值可以返回給 EXEC[UTE]。使用 OUTPUT 參數(shù)可將信息返回給調(diào)用過程。Text、ntext 和 image 參數(shù)可用作 OUTPUT 參數(shù)。使用 OUTPUT 關(guān)鍵字的輸出參數(shù)可以是游標占位符。
8.RECOMPILE: 表明 SQL Server 不會緩存該過程的計劃,該過程將在運行時重新編譯。在使用非典型值或臨時值而不希望覆蓋緩存在內(nèi)存中的執(zhí)行計劃時,請使用 RECOMPILE 選項。
9.ENCRYPTION: 表示 SQL Server 加密 syscomments 表中包含 CREATE PROCEDURE 語句文本的條目。使用 ENCRYPTION 可防止將過程作為 SQL Server 復制的一部分發(fā)布。 說明 在升級過程中,SQL Server 利用存儲在 syscomments 中的加密注釋來重新創(chuàng)建加密過程。
10.FOR REPLICATION :指定不能在訂閱服務(wù)器上執(zhí)行為復制創(chuàng)建的存儲過程。.使用 FOR REPLICATION 選項創(chuàng)建的存儲過程可用作存儲過程篩選,且只能在復制過程中執(zhí)行。本選項不能和 WITH RECOMPILE 選項一起使用。
11.AS :指定過程要執(zhí)行的操作。
12.sql_statement :過程中要包含的任意數(shù)目和類型的 Transact-SQL 語句。但有一些限制。