标签:内容 row .com 校验 tail 性能 存储 word nbsp
本文参考:
存储过程是一段存储在数据库的“子程序”,本质是一个可重复使用的SQL代码块,可以理解为数据库端的“方法”。
存储过程的好处:
①提高性能:由于数据库执行动作时,是先编译后执行的。然而存储过程是一个编译过的代码块,所以执行效率要比T-SQL语句高。
②提高通信速率:网络通信中传输的内容是存储过程名字,相比传输大量的sql语句网络的要通信量小,提高通信速率。
③提高安全性能:存储过程能够使没有权限的用户在控制之下间接地存取数据库,从而确保数据的安全。
举例: 假如某个应用程序要向用户提供修改密码的功能,而不同用户的用户名和密码都存储在一张User表中。
如果,如果不使用存储过程, 该应用程序在访问数据库时, 必须已具有操作“User”表权限的用户身份去连接数据库。此时如果程序员编写的代码出错,或者程序员想恶意修改别人的password, 则数据库User表的安全无法保证。
如果使用存储过程,则可以定义一个具有修改User表权限的存储过程changePassword(username, oldPassword, newPassword), 该存储过程实现了严格的校验逻辑,即首先检查useranme, oldpassword是否匹配, 如果匹配, 则仅仅修改username所对应的password。
例子使用的UserInfo表只有 UserName,UserPass,Email和主键 Id 列
① 简单的无参查询(查询用户名和密码)
--创建名为GetUserInfo的存储过程 create proc GetUserInfo as select username,userpass from UserInfo go --执行存储过程 exec GetUserInfo
② 有返回值的简单插入用户(插入一条新纪录,返回受影响的行数)
--创建名为InsertUserInfo的存储过程 create proc InsertUserInfo as insert into userinfo (username,userpass,email) values (‘newuser‘,‘123‘,‘123@qq.com‘) return @@rowcount go --执行存储过程 exec InsertUserInfo
③ 有输入输出参数的简单查询(查询Id小于参数的用户信息,out 结果集条数)
create proc GetUserInfoLtId @id int=20,--默认值 @count int output as select * from userinfo where id<@id set @count=(select COUNT (*) from userinfo where id<@id) --执行 declare @c int; execute GetUserInfoLtId 50 ,@count=@c output; print @c
标签:内容 row .com 校验 tail 性能 存储 word nbsp
原文地址:https://www.cnblogs.com/wyy1234/p/9028796.html