SQL Server的存储过程和自定义函数

本文详细介绍了SQL Server中的存储过程和自定义函数,包括存储过程的分类、创建与管理,以及自定义函数的创建和删除。存储过程分为系统、自定义和扩展存储过程,可用于执行数据库管理任务和特定业务需求。自定义函数则分为标量和表值函数,便于模块化编程和提高执行效率。文章还解答了如何更改存储过程代码和存储过程能否调用其他存储过程的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SQL Server的存储过程和自定义函数

目录

一、概述... 1

二、存储过程分类... 1

2.1、系统存储过程... 1

2.2、自定义存储过程... 2

2.3、扩展存储过程... 2

三、创建存储过程... 2

3.1、如何创建存储过程... 2

3.2、调用存储过程... 4

3.3、创建带输入参数的存储过程... 4

3.4、创建带输出参数的存储过程... 6

四、管理存储过程... 7

4.1、修改存储过程... 7

4.2、查看存储过程信息... 8

4.3、重命名存储过程... 9

4.4、删除存储过程... 9

五、扩展存储过程过程... 10

六、自定义函数... 11

6.1、创建标量函数... 11

6.2、创建表值函数... 12

6.3、删除函数... 13

七、疑难解惑... 14

7.1、如何更改存储过程中的代码... 14

7.2、存储过程中可以调用其他的存储过程吗... 14

一、概述

系统存储过程是指SQL Server系统创建的存储过程,它的目的在于能够方便地从系统表中查询信息,或者完成与更新数据库表相关的管理任务或其他的系统管理任务。T-SQL语句是SQL Server数据库与应用程序之间的编程接口。

简而言之,存储过程就是SQL Server为了实现特定任务,而将一些需要多次调用的固定操作语句编写成程序段,这些程序段存储在服务器上,由数据库服务器通过子程序来调用。

二、存储过程分类

2.1、系统存储过程

系统存储过程是指SQL Server系统自身提供的存储过程,可以作为命令执行各种操作。系统存储过程主要用来从系统表中获取信息,使用系统存储过程完成数据库服务器的管理工作。系统存储过程位于数据库服务器中,并且以sp_开关,系统存储过程在系统定义和用户定义的数据库中,在调用时不必在存储过程前加数据库限定名。例如,sp_rename系统存储过程可以更改当前数据库中用户创建对象的名称;sp_helptext存储过程可以显示规则、默认值或视图的文本信息。

系统存储过程创建并存放于系统数据库master中。

2.2、自定义存储过程

自定义存储过程就是用户为了实现某一特定业务需求,在用户数据库中编写的T-SQL语句集合,用户存储过程可以接收输入参数、向客户端返回结果和信息、返回输出参数等。创建自定义存储过程时,存储过程名前面加上“##”表示创建了一个全局的临时存储过程;存储过程名前加上“#”时,表示创建局部临时存储过程。局部临时存储过程只能在创建它的会话中使用,会话结束时将被删除。这两种存储过程都存储在tempdb数据库中。用户定义存储过程可以分为两类:Transact-SQL和CLR。

  1. Transact-SQL存储过程是指保存的T-SQL语句集合,可以接受和返回用户提供的参数。存储过程也可能从数据库向客户端应用程序返回数据。
  2. CLR存储过程是指引用Microsoft .NET Framework公共语言方法的存储过程,可以接受和返回用户提供的参数,它们在.NET Framework程序集中是作为类的公共静态方法实现的。

2.3、扩展存储过程

 扩展存储过程是以在SQL Server环境外执行的动态链接库(DLL文件)来实现的,可以加载到SQL Server实例运行的地址空间中执行,扩展存储过程可以使用SQL Server扩展存储过程API来编写。扩展存储过程以前缀“xp_”来标识,对于用户来说,扩展存储过程和普通存储过程一样,可以用相同的方式来执行。

三、创建存储过程

在SQL Server中,可以使用 CREATE PROCEDURE语句或在对象资源管理器中创建存储过程,再使用EXEC语句来调用存储过程。

3.1、如何创建存储过程

  1. 使用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表记录条数的存储过程。

  1. AS:用于指定该存储过程要执行的操作。
  2. procedure_name:新存储过程的名称,并且在架构中必须唯一。可在procedure_name前面使用一个数字符号(#)(#procedure_name)来创建局部临时过程,使用两个数字符号(##procedure_name)来创建全局临时过程。对于CLR存储过程,不能指定临时名称。

  1. 创建存储过程的规则
  1. 可以引用在同一存储过程中创建的对象,只要引用时已经创建了该对象即可。
  2. 可以在存储过程中引用临时表。
  3. 如果在存储过程中创建本地临时表,则临时表仅在该存储过程中存在,退出存储过程后,临时表将消失。
  4. 如果执行的存储过程将调用另一个存储过程,则被调用的存储过程可以访问由第一个存储过程创建的所有对象,包括临时表。
  5. 存储过程中的参数最大数目为2100个。
  6. 存储过程中的最大
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值