SQL 存储过程

Posted 爱学习的帅帅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL 存储过程相关的知识,希望对你有一定的参考价值。

一、什么是存储过程呢?
存储过程(stored procedure)是一组为了完成特定功能的sql语句集。
经过编译以后存储在数据库中,存储过程可能包含程序流、逻辑流以及对数据库的查询。
他可以接受参数。输出参数,返回单个或者多个结果集以及返回值。


二、为什么使用存储过程
1.存储过程可以与其他应用程序共享应用逻辑。确保数据访问和修改的不一致性,
1.1:可以封装业务,可以修改同意位置改变封装的业务规则和策略,
1.2:所有的客户端都可以使用相同的存储过程来确保数据访问和修改的一致性。
2.具有安全性和所有权链接,可附件到他们的证书,用户可以被授予权限来执行。
3.提供了安全机制,即使是没有访问存储过程引用的表或视图的权限的用户,也可以被授权执行改存储过程。
4.允许被模块化,一旦创建,就可以在程序中被调用多次,可以改进程序的课维护性。并允许应用程序同意访问数据库。
5.可以减少网络通讯流量,用户可以发送一个sql语句就可以实现复杂的操作。这样就不需要在发送几百条sql语句了,也可以减少服务器和用户机之间传递的请求数量。

三、存储过程的种类。
1.用户指定以的存储过程,
2.系统,默认的存储过程。
3.扩展存储过程。(少见)

四、存储过程的规则
1、可以引用在同一存储过程中创建的对象,只要引用时已经创建了该对象即可。
2、可以在存储过程内引用临时表。如果在存储过程内创建本地临时表,则临时表仅为该存储过程而存在;退出该存储过程后,临时表将消失
3、如果执行的存储过程将调用另一个存储过程,则被调用的存储过程可以访问由第一个存储过程创建的所有对象,包括临时表在内。 
4、如果执行对远程Microsoft SOL Server 2008实例进行更改的远程存储过程,则不能回滚这些更改。远程存储过程不参与事务处理。 
5、存储过程中的参数的最大数目为2100。
6、存储过程中的局部变量的最大数目仅受可用内存的限制
7、根据可用内存的不同,存储过程最大可达128mb。

五、不能在存储过程中使用的T—SQL语句

当然,还有 USE Student_Name也不可以

 

六、以下是简单的创建存储过程(增查的操作)

注意:创建存储过程的 proc的关键字是procedure 我直接就缩写成proc了

--创建简单的存储过程(无参数)
--create proc proc_name  --创建存储过程
--as
--select * from LianXi

--调用存储过程
--exec proc_name

--创建简单的存储过程(有参数)
--create proc proc_name --创建存储过程
--@sex varchar(10) --定义变量
--as
--select * from LianXi where quarterr = @sex

--调用存储过程
--exec proc_name @sex = '2'

--默认数值的存储过程
--create proc proc_name --创建存储过程
--@buid varchar(50), --定义一个变量
--@zhiwei varchar(10) = '员工' --定义一个变量,然后添加默认值
--AS
--select a.id,a.cuont_id,a.data,b.name,b.age
--from LianXi a , cuont b
--where a.cuont_id = b.id and a.cuont_id = @buid and b.name = @zhiwei

--调用存储过程
--exec proc_name @buid = '3' , @zhiwei = '主管'


----存储过程的输出参数
--create proc student_name
--@name varchar(50),
--@sorce int output -- output输出参数
--as
--select @sorce=avg(b.English+b.language+b.mathematics)/3
--from StudentInfo a,StudenGrade b
--where a.student_id = b.id and a.name = @name

----调用存储过程
--declare @sorce1 int --声明一个int类型的值
--exec student_name @name = '张三' ,@sorce=@sorce1 output -- 输出参数
--print @sorce1 -- 打印输出


----创建修改存储过程
--create proc xiugai
--@id varchar(50),
--@sorce int
--as
--update StudenGrade set mathematics=@sorce where id=@id

----调用修改的存储过程
--exec xiugai @id='201',@sorce='100'

七、以下是简单的创建存储过程可视化操作(删改的操作)

删改的话就比较简单了,可以使用可视化来操作,也可以使用命令来操作,接下来我就用照片来操作一遍。

1、首先创建一个存储过程

 2、成功创建后,对创建的存储过程右键点击出来

 3、点击修改后,就可转到修改存储过程的的页面。

4、删除的话就是下面这个,点击编写存储过程脚本的,这个也可就行查询修改的操作。

 

 八、系统自定义的存储过程(可视化操作)(我也只懂这么多常用的,有其他需要的各位自己去学习吧)

 最后一个内容没截好:1、应该是读的行数2、写的行数3、还有就是错误的行数

九、临时存储过程(在存储过程的命名前加个#号就是临时的存储过程)

1、--创建一个临时的存储过程(这是一个只能局部调用的存储过程)
create proc #proc_name
as
select * from LianXi

--调用临时储存过程
exec #proc_name

 

 2、--创建一个临时的存储过程(这个可以全局调用)
create proc ##proc_name
as
select * from LianXi

--调用临时储存过程
exec ##proc_name

 

 

十、存储过程的嵌套

--存储过程的嵌套(嵌套也是分等级的)
create proc qiant_name
as
select * from StudentInfo
exec proc_name '2' --带上这个前面创建的返回值即可嵌套了

exec qiant_name

 

 

 十一、查看存储过程

--查看存储过程
exec sp_helptext proc_name

 注:本内容仅供是本人自己学习参考,如有雷同实属巧合。请给位大佬手下留情啊!!!

 注:本内容仅供是本人自己学习参考,如有雷同实属巧合。请给位大佬手下留情啊!!!

 注:本内容仅供是本人自己学习参考,如有雷同实属巧合。请给位大佬手下留情啊!!!

以上是关于SQL 存储过程的主要内容,如果未能解决你的问题,请参考以下文章

MS sql如何使用存储过程?

如何在sql创建一条插入数据的存储过程

存储过程跟SQL语句比较,各有啥优点和缺点?

sql数据库中怎样调用带参数的存储过程

怎么查看数据库存储过程

sql中创建关于更新的存储过程