什么是存储过程:存储过程能够说是一个记录集吧,它是由一些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