将从下面几个方面介绍存储过程

1.存储过程的概念

2.存储过程的优缺点

3.存储过程的分类

4.利用t-sql语句创建并执行图书管理系统数据库的存储过程;

5.t-sql语句管理图书管理系统数据库的存储过程;

6.利用t-sql语句修改图书管理系统数据库的存储过程;

7.利用t-sql语句删除图书管理系统数据库的存储过程;

8.利用t-sql语句对图书管理系统数据库的存储过程中的错误进行处理;

一.存储过程的概念:

存储过程是指为了完成特定的功能由一条或多条sql语句组成的集合,这些语句集合 可以被多次调用,类似于批处理文件,通常指定一个名称进行存储,经系统进行编译后存储到数据库的服务器中,作为数据库的对象,形成一个处理单元。存储过程创建之后,用户通过指定存储过程名称与参数,调用该存储过程并且执行。在调用的过程中允许用户声明变量,设置条件,以便增强程序设计的能力。

二.存储过程的优缺点:

1)优点:

1.存储过程运行速度快   为了完成某以特定任务需要大量的t-sql代码进行编译,并进行多次运行,此时存储过程是首选,因为存储过程只在创建时进行一次编译,由查询优化器对其进行分析,优化,并给出执行计划,在以后的每次调用存储过程执行时不需要重新编译。

2.存储过程减少网络流量  由于编辑存储过程的代码是存储到数据库中的,当用户端向服务器端发出调用存储过程的命令时,通过网络传输的只是存储过程的调用,不会有大量的代码在网络中传输,从而极大的减少了网络流量,降低了网络负载。

3.存储过程增强数据代码安全性  因为对存储过程中引用的对象用户不可以直接操作,必须通过sql server系统为用户指定某一具体存储过程的执行权限,由于对存储过程执行权限的限制,所以对存储过程所涉及的数据访问权限同样受到一定的限制,非授权用户是不可以访问相关的数据信息的。存储过程的使用既增加了代码安全性,又保证了数据安全性。

4.存储过程允许模块化设计组件式编程  存储过程一旦被创建在程序中可多次使用,不必每次都重写相应的t-sql代码,在实际应用中有同域的数据库访问接口,程序员可以随时对存储过程进行修改但是丝毫不会影响到应用程序源代码,所以大大提高了程序的可维护性 和可移植性。

5.存储过程屏蔽数据库复杂的细节操作  设计存储过程时用户不必访问数据库的底层信息和数据库内部的对象,可以将复杂的数据库操作进行封装,以便简化操作与设计流程。

2)缺点:

1.存储过程影响到数据库的移植,因为存储过程依赖于数据库管理系统,在存储过程中所封装的t-sql代码不能直接移植到其他数据库管理系统中

2.对集群操作不支持

3.不支持面向对象的程序设计无法面对的方式封装业务逻辑

4.存储过程的代码不易阅读,维护难度大

三.存储过程的分类:

1)系统存储过程

该类存储过程通常被存放到master数据库中,存储过程名称通常以“sp_”为前缀,但是在其他数据库中均可调用系统存储过程,调用时在存储过程名称前面不必添加数据库的限定名。其功能是在表中获取信息,实现数据库服务器的管理任务。

2)用户自定义存储过程

所谓自定义存储过程,是指为了完成某一段特定的功能需求,在用户数据库中利用t-sql自行编辑的语句集合,在用户自定义的过程中可以有输入参数,返回的输出参数及返回至客户端的信息与结果 。如果在存储过程名称前加了“##”符号,表示创建的存储过程是临时的全局性的;如果前面的为“#”符号,表示所创建的存储过程是临时的局部的,该存储过程只能在创建它的会话中使用。以上两种存储过程创建后都存放在tempdb数据库中。

用户自定义存储过程还可以细分为t-sql语言存储过程和CLR存储过程。CLR存储过程是指利用.NET框架公共语言编辑的存储过程,既可以接受用户提供的参数又可以返回存储过程的运行结果,通常用作某个类的公共静态方法。

3)扩展存储过程

通常以“xp_”为前缀标识,在sql server系统外通过执行动态链接库,即DLL文件,来实现的功能,该存储过程经常使用API接口进行编辑,可以加载到sql server实例的地址空间里试试运行。

在sql server常见的扩展存储过程有:

xp_enumgroups 指定WINDOWS本地组列表在WINDOWS域中定义的全局组表

xp_findnextmsg 接受输入的邮件ID号,返回输出的邮件ID号

xp_grantlogin     给用户分配对sql server2012系统的权限

xp_logevent    把用户自定义消息输入到sql server日志文件或WINDOWS系统事件查看器中

xp_loginconfig 显示sql server 2012实例运行时登陆的安全配置

四.利用t-sql语句创建并执行图书管理系统数据库的存储过程:

建立并执行存储过程实例(假设你已有一个数据库LibraryManagement):

--建立一个名为sp_bookquantity的存储过程
CREATE PROCEDURE sp_bookquantity
AS
BEGINSELECT Book_ID,Book_name,Book_author,Book_press,Book_price,Book_quantityFROM BookinfoWHERE Book_quantity<5
END

创建存储过程语法:

CREATE PROCEDURE [EDURE] <存储过程名>     --创建过程名   [,n]         --可选整数,主要作用时对同同名的过程分组,可以使用一条DROP PROCEDURE语句--将分配到同一组中的过程一同删除,若名称中包含分隔标识符,则数字不应该包含于标识符中,只能在存储过程名称前后使用适当的分隔符[{@<参数名><参数数据类型>}            --用于指定存储过程中的参数[VARYING] [=<默认值>]                --用于指定输出参数的结果集,当使用游标数据类型作为输出参数时必须要使用该关键字[OUTPUT][READONLY][,..n]            --被output指定的参数是输出参数,可以将值返回给调用方[WITH{RECOMPILE|ENCRYOTION|RECOMPILE,ENCRYPTION}][FOR REPLICATION]
AS
<SQL 语句>[...n]

执行过程语法:

[EXEC|EXECUTE]{[@<返回状态>=]{<存储过程名称>
[,<number>]                        --number主要作用是对同名的存储过程分组,该选项在扩展存储过程中是无效的
|@<局部变量名>}                    --模块名称
[[@<参数名>=]{<参数值>|@<variable>[OUTPUT]|[DEFAULT]}[,..n]
[WITH RECOMPILE]}              --该选项表示执行存储过程后,需要进行重新编译,重新拟定计划,如果现在有查询计划,该计划将存储到缓存中,不适宜使用该选项。

创建并执行具有输入参数的存储过程proc_readerdepartment

USE LibraryManagement
IF EXISTS(SELECT NAME FROM SYSOBJECTSWHERE NAME='pro_readerdepartment'AND TYPE='P')
DROP PROCEDURE pro_readerdepartment
GO
CREATE PROCEDURE pro_readerdepartment
@ReaderID NVARCHAR(8),
@Readername NVARCHAR(30) OUTPUT,
@Readerdepartment NVARCHAR(30) OUTPUT
AS
SELECT @Readername=Reader_name,@Readerdepartment=Reader_department
FROM Readerinfo
WHERE Reader_ID=@ReaderID
GO

执行:

DECLARE @ReaderID NVARCHAR(8),@Readername NVARCHAR(30),@Readerdepartment NVARCHAR(50)
EXEC pro_readerdepartment '12010614',@Readername OUTPUT,@Readerdepartment OUTPUT
SELECT @Readername,@Readerdepartment

五.利用t-sql语句查看存储过程详细信息:

sp_helptext pro_readerdepartment

六.利用t-sql语句修改图书管理系统数据库的存储过程

将图书名称以“计算机”字样开头的全部检索出来:

USE LibraryManagement
GO
ALTER PROCEDURE pro_bookName
@bookname NVARCHAR(50)='计算机%'
AS
SELECT Book_name,Book_press
FROM Bookinfo
WHERE Book_name LIKE @bookname
GO

执行:

EXECUTE pro_bookname

七.利用t-sql语句删除图书管理系统数据库的存储过程

DROP PROC proc_bookname

八.利用t-sql语句对图书管理系统数据库的存储过程中的错误进行处理

创建存储过程的t-sql语句如下:

USE LibraryManagement
IF EXISTS(SELECT name FROM SYSOBJECTS WHERE name='proc_readerdelerror'
AND xtype='p')
DROP PROCEDURE proc_readerdelerror
GO
CREATE PROCEDURE proc_readerdelerror@ReaderID NVARCHAR(8)
AS
DELETE FROM Readerinfo
WHERE Reader_ID=@ReaderID
PRINT N'error='+CAST(@@ERROR AS NVARCHAR(8))+'rows deleted='+CAST(@@ROWCOUNT AS NVARCHAR(8))

执行存储过程的t-sql语句如下:

EXECUTE proc_readerdelerror @ReaderID='12110203'

sql server数据库之存储过程相关推荐

  1. SQL Server数据库的存储过程中定义的临时表,真的有必要显式删除(drop table #tableName)吗?...

    本文出处:http://www.cnblogs.com/wy123/p/6704619.html 问题背景 在写SQL Server存储过程中,如果存储过程中定义了临时表, 有些人习惯在存储过程结束的 ...

  2. jpa执行mysql存储过程_基于Spring Boot,使用JPA调用Sql Server数据库的存储过程并返回记录集合...

    那么,有些情况,会把一些查询语句写在存储过程中,由存储过程来返回记录集. 在这里就先通过EntityManager创建命名存储过程的方法完成调用. 1.创建SQL存储过程 存储过程返回所有的联系人. ...

  3. SQL server 数据库危险存储过程删除与恢复

    SQL的扩展的删除与恢复 删除 use master  exec sp_dropextendedproc 'xp_cmdshell'  exec sp_dropextendedproc 'xp_dir ...

  4. 易语言 存储过程 mysql_在易语言中调用MS SQL SERVER数据库存储过程(Transact-SQL)方法总结...

    作者:liigo 日期:2010/8/25 Microsoft SQL SERVER 数据库存储过程,根据其输入输出数据,笼统的可以分为以下几种情况或其组合:无输入,有一个或多个输入参数,无输出,直接 ...

  5. SQL Server数据库存储过程——以自定义存储过程为例

    SQL Server数据库存储过程--以自定义存储过程为例 1.什么是数据库存储过程 存储过程就是预编译SQL语句的集合,这些语句存储在一个名称下并作为一个单元处理.存储过程代替了传统的逐条执行SQL ...

  6. [转贴]ASP.NET下对远程SQL SERVER数据库的备份和恢复的存储过程

    Sql server的帮助文档地址,在IE里面直接输入就行 mk:@MSITStore:C:\Program%20Files\Microsoft%20SQL%20Server\80\Tools\Boo ...

  7. SQL Server 数据库备份

    SQL Server 数据库备份 原文 http://www.cnblogs.com/ynbt/archive/2013/04/04/2999642.html 备份数据库是指对数据库或事务日志进行复制 ...

  8. JDBC连接sql server数据库及其它

    JDBC连接sql server数据库的步骤如下: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.lang.Class类的 ...

  9. [转载]在SQL Server数据库之间进行数据导入导出,OPENDATASOURCE

    需要在c盘下先建立一个data.txt文件,然后在文件的第一行写上你要导出的列,不如说要导出id和name这两列,就在第一行写上 id,name 然后保存,使用下列SQL就可以了,你如果要保持原有的I ...

最新文章

  1. js折线图设置y轴刻度_手绘风格的 JS 图表库:Chart.xkcd
  2. 前天在一直Linux根文件系统时提示WARNING: Unable to open an in...
  3. 使用下列 else-if 排列来处理多个条件:
  4. spark读取文件源码分析-2
  5. liferay如何debug
  6. 计算机网络之网络层:2、IP数据报、IP数据报分片
  7. Python案例:格式化输出斐波拉契数列
  8. 关于Adobe软件安装失败的各类错误代码BUG汇总!!
  9. inDesign入门教程,如何对齐和分组内容?
  10. python实现arxiv论文数据解析处理
  11. SharePoint Framework 企业向导(二)
  12. Cinema 4d 软件介绍
  13. 计算机不能引导硬盘,联想电脑win10改win7后不能引导bios中找不到硬盘的解决教程...
  14. Nginx动静分离经典案例配置
  15. 美国男人欢迎中国的丑女人?------------说说洁
  16. SwiftUI——全局背景渐变色(Gradient)案例
  17. 让闲置物品“换”出财富
  18. 《从0到1:CTFer成长之路》1.3 任意文件读取漏洞
  19. stack overflow是程序员必须会用的社区
  20. 太吾绘卷加载卡54_太吾绘卷保存卡死应对方案_无法保存解决方法一览_可可网...

热门文章

  1. 关于网络视频流媒体直播/点播服务流程,你要知道的全在这里了!(新手必看)
  2. 程序员如何写出优雅的代码?
  3. 【C语言】C语言基础重点08——C语言多文件编程分析
  4. bugku -msic-奇怪的png
  5. AI可以预测道路交叉口的车辆轨迹
  6. DirectX版本说明
  7. DBeaver使用 - 连接人大金仓
  8. 【CVPR 2021】自我知识蒸馏:Self-distillation with Batch Knowledge Ensembling Improves ImageNet Classification
  9. 中田浩二“手球”,中国队惜败!
  10. selenium用法详解【从入门到实战】【Python爬虫】【4万字】