SQL Server的存储过程和自定义函数
目录
一、概述
系统存储过程是指SQL Server系统创建的存储过程,它的目的在于能够方便地从系统表中查询信息,或者完成与更新数据库表相关的管理任务或其他的系统管理任务。T-SQL语句是SQL Server数据库与应用程序之间的编程接口。
简而言之,存储过程就是SQL Server为了实现特定任务,而将一些需要多次调用的固定操作语句编写成程序段,这些程序段存储在服务器上,由数据库服务器通过子程序来调用。
二、存储过程分类
系统存储过程是指SQL Server系统自身提供的存储过程,可以作为命令执行各种操作。系统存储过程主要用来从系统表中获取信息,使用系统存储过程完成数据库服务器的管理工作。系统存储过程位于数据库服务器中,并且以sp_开关,系统存储过程在系统定义和用户定义的数据库中,在调用时不必在存储过程前加数据库限定名。例如,sp_rename系统存储过程可以更改当前数据库中用户创建对象的名称;sp_helptext存储过程可以显示规则、默认值或视图的文本信息。
系统存储过程创建并存放于系统数据库master中。
自定义存储过程就是用户为了实现某一特定业务需求,在用户数据库中编写的T-SQL语句集合,用户存储过程可以接收输入参数、向客户端返回结果和信息、返回输出参数等。创建自定义存储过程时,存储过程名前面加上“##”表示创建了一个全局的临时存储过程;存储过程名前加上“#”时,表示创建局部临时存储过程。局部临时存储过程只能在创建它的会话中使用,会话结束时将被删除。这两种存储过程都存储在tempdb数据库中。用户定义存储过程可以分为两类:Transact-SQL和CLR。
- Transact-SQL存储过程是指保存的T-SQL语句集合,可以接受和返回用户提供的参数。存储过程也可能从数据库向客户端应用程序返回数据。
- CLR存储过程是指引用Microsoft .NET Framework公共语言方法的存储过程,可以接受和返回用户提供的参数,它们在.NET Framework程序集中是作为类的公共静态方法实现的。
扩展存储过程是以在SQL Server环境外执行的动态链接库(DLL文件)来实现的,可以加载到SQL Server实例运行的地址空间中执行,扩展存储过程可以使用SQL Server扩展存储过程API来编写。扩展存储过程以前缀“xp_”来标识,对于用户来说,扩展存储过程和普通存储过程一样,可以用相同的方式来执行。
三、创建存储过程
在SQL Server中,可以使用 CREATE PROCEDURE语句或在对象资源管理器中创建存储过程,再使用EXEC语句来调用存储过程。
- 使用CREATE PROCEDURE语句创建存储过程
例1:创建查看SQLDB数据库中stu_detail表的存储过程
USE SQLDB; GO CREATE PROCEDURE SelProc AS SELECT * FROM stu_detail; |
上述语句创建了一个查看stu_detail表的存储过程,每次调用这个存储过程的时候都会执行SELECT语句查看表的内容,这个存储过程和使用SELECT语句查看表内容得到的结果是一样的。
例2:创建名为CountProc的存储过程
USE SQLDB; GO CREATE PROCEDURE CountProc AS SELECT COUNT(*) AS 总数 FROM stu_detail; |
上述语句的作用是创建一个获取stu_detail表记录条数的存储过程。
- AS:用于指定该存储过程要执行的操作。
- procedure_name:新存储过程的名称,并且在架构中必须唯一。可在procedure_name前面使用一个数字符号(#)(#procedure_name)来创建局部临时过程,使用两个数字符号(##procedure_name)来创建全局临时过程。对于CLR存储过程,不能指定临时名称。
- 创建存储过程的规则
- 可以引用在同一存储过程中创建的对象,只要引用时已经创建了该对象即可。
- 可以在存储过程中引用临时表。
- 如果在存储过程中创建本地临时表,则临时表仅在该存储过程中存在,退出存储过程后,临时表将消失。
- 如果执行的存储过程将调用另一个存储过程,则被调用的存储过程可以访问由第一个存储过程创建的所有对象,包括临时表。
- 存储过程中的参数最大数目为2100个。
- 存储过程中的最大