『SQLServer系列教程』——存储过程的创建与使用

请添加图片描述

请添加图片描述
📣读完这篇文章里你能收获到

  • 了解SQLServer存储过程的优点、分类、定义及使用
  • 提供实际操作的案例SQL脚本

请添加图片描述

请添加图片描述

一、概念篇

1 什么是存储过程?

在这里插入图片描述
在这里插入图片描述

2 存储过程的优点

在这里插入图片描述

请添加图片描述

二、存储过程的定义及使用

在这里插入图片描述
在这里插入图片描述

请添加图片描述

三、存储过程的分类

1 系统存储过程

  • 系统存储过程的介绍

在这里插入图片描述

  • 系统存储过程明细

在这里插入图片描述

  • 系统存储过程的调用

在这里插入图片描述

2 带参数的存储过程

在这里插入图片描述

在这里插入图片描述

3 有输出返回的存储过程

在这里插入图片描述
在这里插入图片描述

请添加图片描述

四、案例代码

示例1:常用系统存储过程的使用

sp_databases

EXEC  sp_renamedb 'ProductDB','pDB'

USE StudentManager
GO
sp_tables

EXEC sp_columns Students 

EXEC sp_help Students 

EXEC sp_helpconstraint Students

EXEC sp_stored_procedures  

示例2:常用扩展存储过程的使用

USE master
GO
EXEC xp_cmdshell 'mkdir D:\ProductDB', NO_OUTPUT
IF EXISTS(SELECT * FROM sysdatabases  WHERE name='ProductDB')
   DROP DATABASE ProductDB
GO
--CREATE DATABASE ProductDB
-- (
--  …
--)
--GO
EXEC xp_cmdshell 'dir D:\ProductDB\'   -- 查看文件

示例3:创建、执行无参的存储过程

use StudentManager
go
if exists(select * from sysobjects where name='usp_ScoreQuery')
drop procedure usp_ScoreQuery
go
create procedure usp_ScoreQuery --创建存储过程
as
    --查询考试信息
    select Students.StudentId,StudentName,ClassName,
              ScoreSum=(CSharp+SQLServerDB) from Students
    inner join StudentClass on StudentClass.ClassId=Students.ClassId
    inner join ScoreList on Students.StudentId=ScoreList.StudentId
    order by ScoreSum DESC
    --统计分析考试信息
    select StudentClass.ClassId,C#Avg=avg(CSharp),DBAvg=avg(SQLServerDB)  into #scoreTemp
    from StudentClass 
    inner join Students on StudentClass.ClassId=Students.ClassId
    inner join ScoreList on ScoreList.StudentId=Students.StudentId
    group by StudentClass.ClassId order by ClassId
    select ClassName,C#Avg,DBAvg from #scoreTemp
    inner join StudentClass on StudentClass.ClassId=#scoreTemp.ClassId
go
exec usp_ScoreQuery  --调用存储过程

示例4:创建、执行有参的存储过程

use StudentManager
go
if exists(select * from sysobjects where name='usp_ScoreQuery2')
drop procedure usp_ScoreQuery2
go
--创建带参数的存储过程
create procedure usp_ScoreQuery2 
@CSharp int,
@DB int
as
    select Students.StudentId,StudentName,C#=CSharp,DB=SQLServerDB
    from Students
    inner join ScoreList on Students.StudentId=ScoreList.StudentId
    where CSharp<@CSharp or SQLServerDB<@DB
go
--调用带参数的存储过程
exec usp_ScoreQuery2 60,65 --按照参数顺序赋值
exec usp_ScoreQuery2 @DB=65,@CSharp=60 --参数顺序可以调换


示例5:创建、执行有默认值参数的存储过程

use StudentManager
go
if exists(select * from sysobjects where name='usp_ScoreQuery3')
drop procedure usp_ScoreQuery3
go
--创建带参数的存储过程
create procedure usp_ScoreQuery3 
@CSharp int=60,
@DB int=60
as
    select Students.StudentId,StudentName,C#=CSharp,DB=SQLServerDB
    from Students
    inner join ScoreList on Students.StudentId=ScoreList.StudentId
    where CSharp<@CSharp or SQLServerDB<@DB
go
--调用带参数的存储过程
exec usp_ScoreQuery3 65 --第二个参数没有赋值,则默认
exec usp_ScoreQuery3 @DB=65
exec usp_ScoreQuery3 default,65 --不使用显示方式赋值
exec usp_ScoreQuery3   --两个参数都是用默认参数

示例6:创建带输出参数的存储过程

use StudentManager
go
if exists(select * from sysobjects where name='usp_ScoreQuery4')
drop procedure usp_ScoreQuery4
go
create procedure usp_ScoreQuery4 --创建带参数的存储过程
@AbsentCount int output,--缺考总人数
@FailedCount int output,--不及格总人数
@CSharp int=60,
@DB int=60
as
    select Students.StudentId,StudentName,C#=CSharp,DB=SQLServerDB
				 from Students
				 inner join ScoreList on Students.StudentId=ScoreList.StudentId
				 where CSharp<@CSharp or SQLServerDB<@DB        --显示结果列表 
    select @AbsentCount=count(*) from Students 
				where StudentId not in(select StudentId from ScoreList) --查询缺考总人数
    select @FailedCount=count(*) from ScoreList
				 where CSharp<@CSharp or SQLServerDB<@DB      --查询不及格总人数
go

示例7:调用带输出参数的存储过程

use StudentManager
go
--调用带参数的存储过程
declare @AbsentCount int,@FailedCount int --首先定义输出参数
exec usp_ScoreQuery4 @AbsentCount output,@FailedCount output
--使用反馈的结果
select 缺考总数=@AbsentCount,不及格总数=@FailedCount

请添加图片描述

请添加图片描述

### 回答1: SQL Server 实验五:储存过程的创建使用 储存过程是一组预定义的 SQL 语句,可以被多次调用。它们可以接受参数,可以返回值,可以执行一系列的 SQL 语句,可以包含控制流程的语句,可以使用临时表等等。储存过程可以提高数据库的性能,减少网络流量,提高安全性等等。 在 SQL Server 中,创建储存过程需要使用 CREATE PROCEDURE 语句。语法如下: CREATE PROCEDURE procedure_name [ { @parameter [ data_type ] [ = default ] } ] [ WITH <procedure_option> [ ,...n ] ] AS sql_statement [;] [ ...n ] 其中,procedure_name 是储存过程的名称,@parameter 是储存过程的参数,data_type 是参数的数据类型,default 是参数的默认值,WITH <procedure_option> 是储存过程的选项,sql_statement 是储存过程的 SQL 语句。 例如,以下是一个简单的储存过程,它接受一个参数 @name,返回一个包含该名称的所有记录的结果集: CREATE PROCEDURE get_records_by_name @name nvarchar(50) AS BEGIN SELECT * FROM records WHERE name = @name END 要执行储存过程,可以使用 EXECUTE 或 EXEC 语句。例如: EXECUTE get_records_by_name 'John' 或者: EXEC get_records_by_name 'John' 储存过程还可以使用 OUTPUT 参数返回值。例如: CREATE PROCEDURE get_total_records @total_records int OUTPUT AS BEGIN SELECT @total_records = COUNT(*) FROM records END 要执行带有 OUTPUT 参数的储存过程,需要使用 DECLARE 语句声明一个变量来接收返回值。例如: DECLARE @total_records int EXEC get_total_records @total_records OUTPUT SELECT @total_records 以上就是 SQL Server 实验五:储存过程的创建使用的简单介绍。储存过程是 SQL Server 中非常重要的一个功能,可以提高数据库的性能和安全性,值得深入学习和掌握。 ### 回答2: SQL Server是一个流行的关系型数据库管理系统,支持各种编程语言和工具。在SQL Server中,储存过程是一组预定义的SQL语句的集合,可以多次调用,并且支持传入参数,可以简化复杂的数据操作任务。 创建储存过程可以在SQL Server Management Studio(SSMS)中使用Transact-SQL语言或可视化操作。首先,我们先介绍在SSMS中可视化创建储存过程的方法: 1. 打开SSMS并连接到SQL Server实例 2. 打开“对象资源管理器”,展开“数据库” 3. 找到要创建储存过程的数据库,右键单击并选择“新建查询” 4. 在查询编辑器中输入以下代码: ``` CREATE PROCEDURE [dbo].[sp_test] @parameter1 varchar(50), @parameter2 int AS BEGIN -- Insert statements for procedure here SELECT @parameter1 AS StringParam, @parameter2 AS IntParam END GO ``` 其中,“CREATE PROCEDURE”语句定义了储存过程的名称、“[dbo]”表示储存过程所在的模式,可以根据需要进行更改。紧接着的“@parameter1”和“@parameter2”是定义的参数名称和类型。在“AS”关键字后,我们可以编写储存过程的SQL语句。在例子中,我们只是简单地选择参数并将其返回。 5. 点击“执行”按钮(或按F5),储存过程就创建成功了。 使用储存过程也是非常简单的。我们可以通过 EXECUTE 或 CALL 语句来执行一个储存过程。例如: ``` EXECUTE [dbo].[sp_test] 'Hello, World!', 123 ``` 执行该语句将会返回以下结果: ``` StringParam IntParam ----------------- ----------- Hello, World! 123 ``` 在使用储存过程时,我们可以传递任意数量和类型的参数,然后使用它们执行各种SQL操作。这不仅可以提高性能,还可以使我们的代码更容易维护和扩展。 总的来说,SQL Server储存过程是一种非常有用的工具,可以使数据库操作更加高效、稳定和可维护。无论你是做数据分析、Web开发还是企业级应用,都应该了解如何创建使用它们。 ### 回答3: SQL Server是一款广泛应用于企业级数据库管理系统的软件。储存过程是SQL Server中一类常见的代码类型,可以实现存储并重用一些数据库操作,使得开发人员可以在应用中使用这些操作。本文将介绍SQL Server实验五,储存过程的创建使用。 一、创建储存过程 SQL Server可以通过以下语法创建储存过程: ``` CREATE PROCEDURE procedure_name AS BEGIN --SQL statement(s) END; ``` 在创建储存过程时,需要指定储存过程的名称(procedure_name),并在BEGIN和END之间编写一系列SQL语句,这些语句将在储存过程被调用时执行。 例如,以下是一个简单的储存过程,用于在表中插入一条新的记录: ``` CREATE PROCEDURE insert_data AS BEGIN INSERT INTO table_name (column1, column2, column3) VALUES (value1, value2, value3) END; ``` 二、使用储存过程 使用储存过程非常简单,只需要使用以下语法: ``` EXECUTE procedure_name; ``` 比如,要使用上面创建的储存过程插入一条新记录,只需要运行以下命令: ``` EXECUTE insert_data; ``` 这将执行储存过程中的所有SQL语句,并在表中插入一条新的记录。 储存过程还提供了一些进一步的选项,例如输入参数和输出参数。通过使用输入参数,可以向储存过程中传递需要处理的数据;通过使用输出参数,可以从储存过程中返回处理结果。 三、总结 储存过程是SQL Server中非常常见和实用的功能,可以帮助我们定义一些通用的数据处理逻辑,并重用这些逻辑。在实际应用中,我们可以根据具体的业务需求创建不同类型的储存过程,并通过输入参数和输出参数实现更复杂的数据操作。当然,在使用储存过程时要注意安全问题,避免出现SQL注入等攻击。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老陈聊架构

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值