设为首页 收藏本站
查看: 687|回复: 0

[经验分享] SQL-Server存储过程基础

[复制链接]

尚未签到

发表于 2015-6-30 11:43:01 | 显示全部楼层 |阅读模式
一. 什么是存储过程
    在SQL-Server中,存储过程是一组T-SQL命令集合,可视为存储在数据库中的一段子程序,用户通过指定存储过程的名字和参数来执行它。T-SQL是标准SQL的扩展,不仅结合了SQL的数据操作能力,而且具备了过程化语言的流程控制能力。

二. 存储过程运行流程
   DSC0000.png   

三. 创建存储过程语法


DSC0001.gif DSC0002.gif 创建存储过程


CREATE PROCEDURE proc_name
[{@paramter_name}{type} [ = default_value ] [OUTPUT] ]
[{ WITH [ RECOMPILE | ENCRYPTION | RECOMPILE,ENCRYPTION ]}]
AS
BEGIN
statements
END
    1. 命名存储过程
    CREATE PROCEDURE proc_name
    对于自己来讲,我比较倾向于使用小写字母配合下划线的方式命名存储过程,因为对于T-SQL关键字全部使用大写表示,这样就可以形成良好的区分度,使整个结构更加清晰,可读性更高。存储过程的命名应该能表达这个存储过程能做什么,针对那些表,对于团队来说,最好能制定出一套命名规范,并坚持使用下来,这样即使存储过程的数量级很大的时候,也可以有良好的组织性。应该避免的一种情况是使用sp_前缀命名存储过程,因为SQL-Server的系统存储过程就是以sp_开头的,这样你自己编写的存储过程可能和系统存储过程出现冲突,带来额外的麻烦。
    2.参数的使用
    {@parameter_name} {type} [=default_value] [OUTPUT]
    存储过程在执行的时候可以通过传入参数的方法提供信息,这有点类似于函数的参数功能,当然参数只是可选的,可以使用N个参数,或者一个参数也不使用。当使用多个参数的时候,中间应该用逗号分隔开来。
    参数的命名必须使用@作为前缀,同时必须声明数据类型。参数的命名推荐使用小写字母配合下划线的方式。也可以给参数赋值一个默认值,不过这只是可选的,同样,参数也可以指定为输出参数,输出参数即可以用来传入值,也可以用来传出值,它使用OUTPUT关键字表示。


带参数的存储过程


CREATE PROCEDURE proc_book_add
(
--不带默认值的参数   
@book_name NVARCHAR(20),
--带默认值的参数
@book_able BIT = 1,
--输出参数
@book_id INT OUTPUT
)
AS
    3.存储过程附加指令
        WITH { RECOMPILE | ENCRYPTION | RECOMPILE,ENCRYPTION }
    RECOMPILE指示SQL-Server在每次运行存储过程的时候都重新编译整个过程。在之前的存储过程运行流程图中可以看到,存储过程会重用首次编译的计划,加上这个指令后,存储过程将不遵循这个原则。通常这个指令是与数据库执行优化有关,有兴趣的读者可以google一下。
  ENCRYPTION指示对存储过程进行加密,保护源代码不被窥视和修改。
DSC0003.png
  这是加密后的proc_book_add,用户现在便无法查看源代码和修改了。

四. 执行存储过程与删除存储过程
    在未进入如何写存储过程的主体前,先介绍一下如何执行存储过程和删除存储过程,这两个操作应该是比较简单的。
    1.执行存储过程
    { EXECUTE | EXEC} proc_name [@pram=value [OUTPUT]]
    在带参数的情况下,优先使用@parameter=value的形式。如果参数有默认值,并且传入的也是默认值,则可以省略参数;如果参数是一个输出参数,则需要携带OUTPUT关键字。


执行带参数的存储过程


--声明一个变量
DECLARE @bookId INT;
--输入参数 与 输出参数
EXEC proc_book_add @book_name='SQL',@book_able=1,@book_id=@bookId OUTPUT
    2.删除存储过程
    DROP PROCEDURE proc_name

五.T-SQL程序设计
    1.定义代码块
    BEGIN statements   END
  组合BEGIN-END类似于C#中的标签{ },用来把一连串代码定义为一块。
  2.声明变量
    DECLARE @variable type
    变量的命名同样使用@开头,首字符小写命名。


声明变量


--声明一个变量
DECLARE @bookId INT;
--声明多个变量
DECLARE @bookName NVARCHAR(50),@bookAble BIT;
    3.变量赋值
    SET @variable = value


变量赋值


--SET语句只能用来给单个变量赋值
SET @bookId=1
SET @bookAble=1
SET @bookName='SQL'
    4.分支语句


分支语句


--完整分支语句模板
IF bool_statement
statements
ELSE IF bool_statement
statements
ELSE
statements
  与其他开发语言类似,IF后面可以跟ELSE也可以不跟,可以有ELSE IF也可以没有。同时需要注意一点的是,IF后只执行一块代码,如果要执行多条语句,必须用BEGIN-END包裹起来。


分支语句实例


--分支语句
--单条语句也可以使用BEGIN-END包裹
IF @bookAble=1
SET @bookName='SQL YES'   
ELSE
BEGIN
SET @bookName='SQL NO'
END
    5.循环语句


循环语句


--循环语句模板
WHILE bool_expression
{ sql_statement | statement_block }
[ BREAK | CONTINUE ]

--循环实例
DECLARE @count INT;
SET @count = 1;
WHILE @count=0),
CHECK (book_borrowed>=0),
CHECK (book_borrowed

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-81899-1-1.html 上篇帖子: Sql Server 主键由字母数字组成并按照数字自动增长 下篇帖子: SQL Server 2000 升级到 SQL Server 2008 性能问题之一
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表