什麼是存儲過程:存儲過程能夠說是一個記錄集吧,它是由一些T-SQL語句組成的代碼塊,這些T-SQL語句代碼像一個方法同樣實現一些功能(對單表或多表的增刪改查),而後再給這個代碼塊取一個名字,在用到這個功能的時候調用他就好了。
存儲過程的好處:
1.因爲數據庫執行動做時,是先編譯後執行的。然而存儲過程是一個編譯過的代碼塊,因此執行效率要比T-SQL語句高。
2.一個存儲過程在程序在網絡中交互時能夠替代大堆的T-SQL語句,因此也能下降網絡的通訊量,提升通訊速率。
3.經過存儲過程可以使沒有權限的用戶在控制之下間接地存取數據庫,從而確保數據的安全。html
存儲過程一些語法,次語法從別處複製而來sql
--------------建立存儲過程----------------- CREATE PROC [ EDURE ] procedure_name [ ; number ] [ { @parameter data_type } [ VARYING ] [ = default ] [ OUTPUT ] ] [ ,...n ] [ WITH { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ] [ FOR REPLICATION ] AS sql_statement [ ...n ] --------------調用存儲過程----------------- EXECUTE Procedure_name '' --存儲過程若是有參數,後面加參數格式爲:@參數名=value,也可直接爲參數值value --------------刪除存儲過程----------------- drop procedure procedure_name --在存儲過程當中能調用另一個存儲過程,而不能刪除另一個存儲過程
下面以一個例子演示一下存儲過程,例子永遠都是最好理解的數據庫
1,首先建立一個表,語句以下安全
CREATE TABLE USERACCOUNT( USERID VARCHAR(25), NAME VARCHAR(25), PASSWORLD VARCHAR(25), REGISTERTIME DATETIME, REGISTERIP INT );
2,插入value,語句以下,(插入多少條隨意)網絡
INSERT INTO USERACCOUNT(USERID,NAME,PASSWORDW,REGISTERTIME,REGISTERIP) VALUES(12,6,6,2012-12-31,6); INSERT INTO USERACCOUNT(USERID,NAME,PASSWORDW,REGISTERTIME,REGISTERIP) VALUES(18,5,5,2013-01-01,5); INSERT INTO USERACCOUNT(USERID,NAME,PASSWORDW,REGISTERTIME,REGISTERIP) VALUES(19,1,1,2013-01-01,1); INSERT INTO USERACCOUNT(USERID,NAME,PASSWORDW,REGISTERTIME,REGISTERIP) VALUES(20,2,2,2013-01-01,2); INSERT INTO USERACCOUNT(USERID,NAME,PASSWORDW,REGISTERTIME,REGISTERIP) VALUES(21,3,3,2013-01-01,3); INSERT INTO USERACCOUNT(USERID,NAME,PASSWORDW,REGISTERTIME,REGISTERIP) VALUES(22,4,4,2013-01-01,4); INSERT INTO USERACCOUNT(USERID,NAME,PASSWORDW,REGISTERTIME,REGISTERIP) VALUES(23,5,5,2013-01-01,5); INSERT INTO USERACCOUNT(USERID,NAME,PASSWORDW,REGISTERTIME,REGISTERIP) VALUES(24,6,6,2013-01-01,6); INSERT INTO USERACCOUNT(USERID,NAME,PASSWORDW,REGISTERTIME,REGISTERIP) VALUES(25,7,7,2013-01-01,7); INSERT INTO USERACCOUNT(USERID,NAME,PASSWORDW,REGISTERTIME,REGISTERIP) VALUES(26,8,8,2013-01-01,8); INSERT INTO USERACCOUNT(USERID,NAME,PASSWORDW,REGISTERTIME,REGISTERIP) VALUES(NULL,NULL,NULL,NULL,NULL);
建立好表格以下,table line缺失了,不影響理解code
USERID NAME PASSWORLD REGISTERTIME REGISTERIP 12 6 6 1905-05-24 00:00:00.000 6 18 5 5 1905-07-05 00:00:00.000 5 19 1 1 1905-07-05 00:00:00.000 1 20 2 2 1905-07-05 00:00:00.000 2 21 3 3 1905-07-05 00:00:00.000 3 22 4 4 1905-07-05 00:00:00.000 4 23 5 5 1905-07-05 00:00:00.000 5 24 6 6 1905-07-05 00:00:00.000 6 25 7 7 1905-07-05 00:00:00.000 7 26 8 8 1905-07-05 00:00:00.000 8 NULL NULL NULL NULL NULL
3,建立一個簡單的select 存儲過程htm
-------------建立名爲GetUserAccount的存儲過程---------------- create Procedure GetUserAccount as select * from UserAccount go -------------執行上面的存儲過程---------------- exec GetUserAccount
執行結果:至關於運行 select * from USERCOUNT 這行代碼,結果爲整個表的數據。blog
總結:我的理解用到存儲過程的場景,是批量處理或者定時處理數據的時候用到,這樣能夠大大減小重複寫sql,節省時間且高效,之後用到多了還會深刻了解。編譯
有人寫的更好:table
http://www.cnblogs.com/knowledgesea/archive/2013/01/02/2841588.html