首页 / 更多教程 / SQL入门经典(八)之存储过程
SQL入门经典(八)之存储过程
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了SQL入门经典(八)之存储过程,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3735字,纯文字阅读大概需要6分钟。
内容图文
AdventureWorks GO --切换到AdventureWorks数据库 CREATE PROCEDURE sp_Employee AS SELECT * FROM HumanResources.Employee GO--提前处理语句。防止下面EXEC sp_Employee抛出错误 exec sp_Employee看起来是不是很简单。返回一个data表。没有参数的存储过程。
使用ALTER 修改存储过程。
在使用T-SQL编辑存储过程需要注意,这是完全替换现有的存储过程。使用ALTER PROC还是CREATE PROC语句的唯一缺点包括以下几点:
1.ALTER PROC:期望找到一个已有的存储过程,而CREATE不是。
2.ALTER PROC:保留存储过程上已经建立的任何权限。它在系统对象中保留了相同的对象ID并允许保留依赖关系。如:过程A调用过程B,并删除和重新创建了过程B,那么不能在看到这二者的依赖关系了。如果使用ALTER ,依赖关系仍然存在。
3.ALTER PROC:在可能调用被修改的存储过程的其他对象上保留任何依赖信息(这一条也是最重要的)。
删除储存过程:这个最简单不过了。还是删除数据库、表和视图等对象通用语句,
DROP PROC|PROCEDURE <sporcedure name> 就完成整个删除工作了。
使用参数化存储过程:
声明参数是需要下面2-4条信息:名称,数据类型,默认值,反向。其语法:@parameter_name [AS] datatype [=defalut|NULL] [VARYING ] [OUTPUT|OUT]
创建一个和前面不同版本的存储过程
USE AdventureWorks GO --切换到AdventureWorks数据库 CREATE PROCEDURE sp_Contact @LastName nvarchar(50) AS SELECT * FROM Person.Contact WHERE LastName LIKE ‘%‘+@LastName+‘%‘ exec sp_Contact --未提供值, 消息 201,级别 16,状态 4,过程 sp_Contact,第 0 行 过程或函数 ‘sp_Contact‘ 需要参数 ‘@LastName‘,但未提供该参数。 exec sp_Contact ‘ad‘ --查询完成共233条信息
如何获取输出参数并有返回值:在做分页查询时候会用到这种。先看下存储过程
CREATE PROCEDURE sp_ContactPage @pageStart int, @pageEnd int, @pageCount int OUTPUT AS begin SELECT @pageCount=count(1) FROM Person.Contact;--获取总条数。并且设置@pageCount的值 WITH Contact as( select row_number() over(order by ContactID desc) as RowNumber,* from Person.Contact) SELECT * from Contact where RowNumber between @pageStart and @pageEnd; --分页查询,在sql server 2012有更简单分页查询。这是SQL SERVER 2005以后支持。2000需要子查询。博客后面会介绍漏掉的子查询和索引,SQL脚本这些。 end declare @rowcount int exec sp_ContactPage 0,20,@rowcount output select @rowcountView Code
如何使用返回值来获取错误结果:
CREATE PROCEDURE sp_errorLogin @username nvarchar(20), @userpass nvarchar(30) AS begin if(@username!=‘admin‘) return -1;--表示用户名不存在(为了方便不使用数据库了) if(@userpass!=‘admin‘) return 1;--密码错误 return 0;--登录成功 end declare @status int ; exec @status= sp_errorLogin ‘admin‘,‘222‘ select @status as ‘密码错误‘ exec @status= sp_errorLogin ‘222‘,‘222‘ select @status as ‘帐号错误‘ exec @status= sp_errorLogin ‘admin‘,‘admin‘ select @status as ‘登录成功‘View Code
后面章节讲@@Error和try....cacth的异常处理,我把它们放在事务里讲了。因为事务发生错误就会rollback tran。
递归:编程很少会用到递归,有时候递归是最有效的解决方案,如菜单树。递归是指一条代码自身调用自身的情况,危险性也是很明显-就是进行死循环的调用。如何调用取决你或者代码。SQL递归调用最多只有32次,超过32次就会抛出异常。
最经典的就是阶乘如:5的阶乘120它是如何实现 5*4*3*2*1。
CREATE proc sp_jx @size int , @count int output AS declare @temp_s int ; declare @temp_c int ; if @size >=1 begin select @temp_s=@size-1; exec sp_jx @temp_s,@temp_c output select @count= @size*@temp_c; end else select @count=1 return GO declare @count int exec sp_jx 5,@count output select @count exec sp_jx 32,@count output select @countView Code
使用存储过程的时机:(优点)
1.通常更佳的性能。
2.可以作为安全隔离层(控制数据访问和跟新方式)
3.可以重用代码
4.划分代码
5.根据在运行时建立的动态而可以灵活执行
缺点:
移植性差,不能跨平台移植
在一些情况下可能因为错误的执行计划而被锁定(实际影响性能).
未完待续。
SQL入门经典(八)之存储过程
标签:
本文系统来源:http://www.cnblogs.com/panda951010/p/5616077.html
内容总结
以上是互联网集市为您收集整理的SQL入门经典(八)之存储过程全部内容,希望文章能够帮你解决SQL入门经典(八)之存储过程所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。