存储过程知识总结【二】有哪些要点补充?

2026-06-09 05:291阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计837个文字,预计阅读时间需要4分钟。

存储过程知识总结【二】有哪些要点补充?

存储过程知识概述

存储过程是数据库中的一种编程对象,用于封装一系列SQL语句,以便于执行重复的任务。它能够提高数据库性能,简化代码管理,并增强安全性。

描述:

存储过程知识主要包括以下方面:

- 存储过程的基本概念和用途- 创建和执行存储过程- 参数传递和返回值- 常用控制流语句(如IF-ELSE、循环等)- 错误处理

示例:

以Northwind数据库的Employees表为例,以下是一个简单的存储过程示例,用于获取所有员工的姓名和职位:

sqlCREATE PROCEDURE GetEmployeeDetailsASBEGIN SELECT FirstName, LastName, Title FROM Employees;END;

执行此存储过程:

sqlEXEC GetEmployeeDetails;

存储过程知识

/*==========================================================*描述:存储过程知识点总结,以Northwind数据库的Employees表为例

===========================================================*/

--=========================1.out输出/输出的存储过程==================

create procedure usp_OutParameterSelect  @employeeID int,  @name nvarchar(10) out,--**即作为输入,又作为输出**  @lastName nvarchar(20) out --**out与output在这里通用**asbegin  select     @name=FirstName--**重新赋值,作为输出**    ,@lastName=LastName   from dbo.Employees  where EmployeeID = @employeeID  and City = @name--**输入参数查询**end

GO

--===========================执行测试=======================

declare @employeeID int,@name nvarchar(10),@lastName nvarchar(20)set @employeeID = 6set @name = ‘London‘

execute usp_OutParameterSelect @employeeID,@name output,@lastName output

select @name as FirstName,@lastName as LastName

GO

--=========================2.异常处理的存储过程=================

create procedure usp_ExceptionHandling

as

begin  begin try     select 1/0--**除数为零**  end try

  begin catch    if @@ERROR 0      declare @ErrorMessage nvarchar(4000)          ,@ErrorSeverity int          ,@ErrorState int      select @ErrorMessage = ERROR_MESSAGE()--**错误的信息**          ,@ErrorSeverity = ERROR_SEVERITY()--***错误的严重级别*          ,@ErrorState = ERROR_STATE()--**错误的状态**      /*抛出一个异常*/      raiserror (@ErrorMessage,@ErrorSeverity,@ErrorState)  end catchend

GO

--===========================执行测试==========================

execute usp_ExceptionHandling

--执行结果如下:/*Msg 50000, Level 16, State 1, Procedure usp_ExceptionHandling, Line 17Divide by zero error encountered.*/GO--=========================3.事物处理的存储过程===================

alter procedure usp_Transaction

asbegin  begin try  SET XACT_ABORT ON  /*  *当SET XACT_ABORT为ON 时,如果Transact-SQL语句产生运行时错误,事务终止并回滚.  *为OFF 时,只回滚产生错误的语句.而事务继续处理.  */  begin transaction  --**这条跟新语句执行时会出现异常,FirstName被定义为Not Null**  update dbo.Employees set FirstName = NULL  where EmployeeID = 1  update dbo.Employees set FirstName = FirstName + ‘XXX‘  where City = ‘London‘  commit transaction  end try  begin catch    if @@TRANCOUNT > 0      rollback transaction--**事物回滚**    declare @ErrorMessage nvarchar(4000)        ,@ErrorSeverity int        ,@ErrorState int    select @ErrorMessage = ERROR_MESSAGE()--**错误的信息**        ,@ErrorSeverity = ERROR_SEVERITY()--***错误的严重级别*        ,@ErrorState = ERROR_STATE()--**错误的状态**    /*抛出一个异常*/    raiserror (@ErrorMessage,@ErrorSeverity,@ErrorState)end catch

end

--===========================执行测试==============================

execute usp_Transaction

/*==============================================================*********************************End******************************************==============================================================*/

存储过程知识总结【二】有哪些要点补充?

本文共计837个文字,预计阅读时间需要4分钟。

存储过程知识总结【二】有哪些要点补充?

存储过程知识概述

存储过程是数据库中的一种编程对象,用于封装一系列SQL语句,以便于执行重复的任务。它能够提高数据库性能,简化代码管理,并增强安全性。

描述:

存储过程知识主要包括以下方面:

- 存储过程的基本概念和用途- 创建和执行存储过程- 参数传递和返回值- 常用控制流语句(如IF-ELSE、循环等)- 错误处理

示例:

以Northwind数据库的Employees表为例,以下是一个简单的存储过程示例,用于获取所有员工的姓名和职位:

sqlCREATE PROCEDURE GetEmployeeDetailsASBEGIN SELECT FirstName, LastName, Title FROM Employees;END;

执行此存储过程:

sqlEXEC GetEmployeeDetails;

存储过程知识

/*==========================================================*描述:存储过程知识点总结,以Northwind数据库的Employees表为例

===========================================================*/

--=========================1.out输出/输出的存储过程==================

create procedure usp_OutParameterSelect  @employeeID int,  @name nvarchar(10) out,--**即作为输入,又作为输出**  @lastName nvarchar(20) out --**out与output在这里通用**asbegin  select     @name=FirstName--**重新赋值,作为输出**    ,@lastName=LastName   from dbo.Employees  where EmployeeID = @employeeID  and City = @name--**输入参数查询**end

GO

--===========================执行测试=======================

declare @employeeID int,@name nvarchar(10),@lastName nvarchar(20)set @employeeID = 6set @name = ‘London‘

execute usp_OutParameterSelect @employeeID,@name output,@lastName output

select @name as FirstName,@lastName as LastName

GO

--=========================2.异常处理的存储过程=================

create procedure usp_ExceptionHandling

as

begin  begin try     select 1/0--**除数为零**  end try

  begin catch    if @@ERROR 0      declare @ErrorMessage nvarchar(4000)          ,@ErrorSeverity int          ,@ErrorState int      select @ErrorMessage = ERROR_MESSAGE()--**错误的信息**          ,@ErrorSeverity = ERROR_SEVERITY()--***错误的严重级别*          ,@ErrorState = ERROR_STATE()--**错误的状态**      /*抛出一个异常*/      raiserror (@ErrorMessage,@ErrorSeverity,@ErrorState)  end catchend

GO

--===========================执行测试==========================

execute usp_ExceptionHandling

--执行结果如下:/*Msg 50000, Level 16, State 1, Procedure usp_ExceptionHandling, Line 17Divide by zero error encountered.*/GO--=========================3.事物处理的存储过程===================

alter procedure usp_Transaction

asbegin  begin try  SET XACT_ABORT ON  /*  *当SET XACT_ABORT为ON 时,如果Transact-SQL语句产生运行时错误,事务终止并回滚.  *为OFF 时,只回滚产生错误的语句.而事务继续处理.  */  begin transaction  --**这条跟新语句执行时会出现异常,FirstName被定义为Not Null**  update dbo.Employees set FirstName = NULL  where EmployeeID = 1  update dbo.Employees set FirstName = FirstName + ‘XXX‘  where City = ‘London‘  commit transaction  end try  begin catch    if @@TRANCOUNT > 0      rollback transaction--**事物回滚**    declare @ErrorMessage nvarchar(4000)        ,@ErrorSeverity int        ,@ErrorState int    select @ErrorMessage = ERROR_MESSAGE()--**错误的信息**        ,@ErrorSeverity = ERROR_SEVERITY()--***错误的严重级别*        ,@ErrorState = ERROR_STATE()--**错误的状态**    /*抛出一个异常*/    raiserror (@ErrorMessage,@ErrorSeverity,@ErrorState)end catch

end

--===========================执行测试==============================

execute usp_Transaction

/*==============================================================*********************************End******************************************==============================================================*/

存储过程知识总结【二】有哪些要点补充?