如何在 SQL Server 的存储过程和函数里进行错误处理

【Sql Server】随机查询一条表记录,并重重温回顾下存储过程的封装和使用 温故而知新,最近在写sql查询语句,需求是随机查询表的其中一条记录。基于这个查询,顺便把数据库自定义函数、存储过程这个两个知识点重温固定下。因此,本篇文章将在随机查询一条表记录的基础上,把sql语句封装到存储过程里。 阅读详情

sql server 2005里引进了try...catch结构,下面具体讲述如何使用,并介绍处理错误是用到的各种函数和变量,包括:ERROR_NUMBER(),ERROR_SEVERITY(),ERROR_STATE(),ERROR_PROCEDURE(),ERROR_LINE(),ERROR_MESSAGE(),@@ERROR和RAISERROR

 

 

try...catch例子如下:

 

BEGIN TRY
    -- Generate a divide-by-zero error.
    SELECT 1/0;
END TRY
BEGIN CATCH
    SELECT
        ERROR_NUMBER() AS ErrorNumber,
        ERROR_SEVERITY() AS ErrorSeverity,
        ERROR_STATE() AS ErrorState,
        ERROR_PROCEDURE() AS ErrorProcedure,
        ERROR_LINE() AS ErrorLine,
        ERROR_MESSAGE() AS ErrorMessage;

        SELECT @@ERROR AS ErrNum

        RAISERROR (N'This is message %s %d.', -- Message text.
                10, -- Severity,
                1, -- State,
                N'number', -- First argument.
                5); -- Second argument.
END CATCH;
GO

 

 

其中catch模块里的各个错误处理方法功能如下:

        ERROR_NUMBER():获取错误号。

 

        ERROR_SEVERITY():返回错误等级(严重程度)。

 

        ERROR_STATE():返回错误状态码。有时候在几种条件下都会发生同一种错误,比如1105号错误,每一种产生该错误的特定条件都对应一个状态码(state code),ERROR_STATE()返回的就是这个值。

        ERROR_PROCEDURE():获取发生错误的sp名,如果不是sp或者trigger抛出的错误或者该方法是在catch模块外被调用,则返回null值。

        ERROR_LINE():返回出错的行号。

        ERROR_MESSAGE():返回错误的文本信息。

       @@ERROR:错误号,和ERROR_NUMBER()不同的是,@@ERROR在每条语句执行完之后都会被重置,而ERROR_NUMBER()只在发生错误的时候才发生变化。

        RAISERROR:抛出错误。具体语法如下:

                 RAISERROR ( { msg_id | msg_str | @local_variable }
                         { ,severity ,state }
                         [ ,argument [ ,...n ] ] )
                         [ WITH option [ ,...n ] ]

        参数含义如下:msg_id是消息ID,保存在sys.messages中。
                          msg_str 是消息文本,是临时指定的文本消息。
                          @local_variable 是文本变量,保存消息文本。
                          severity:错误等级。

                          state:错误状态码。

                          argument:如果msg_str里包含参数,则在这里指定。
                          WITH option:用户指定选项,一共有3个选项可以指定,分别是

                                              LOG:写错误日志。错误日志里的错误不能超过440字节;只有sysadmin或者有Alter TRACE权限的用户能指定本选项。

                                              NOWAIT:立即发送错误信息。

                                              SETERROR:将msg_id的值赋给@@ERROR和ERROR_NUMBER,如果没有msg_id,就赋值5000.

 

        eg.

 

           RAISERROR (N'This is message %s %d.', -- Message text.
                      10, -- Severity,
                      1, -- State,
                      N'number', -- First argument.
                      5); -- Second argument.
           -- The message text returned is: This is message number 5.
           GO

           RAISERROR (N'<<%*.*s>>', -- Message text.
                       10, -- Severity,
                       1, -- State,
                       7, -- First argument used for width.
                       3, -- Second argument used for precision.
                       N'abcde'); -- Third argument supplies the string.
            -- The message text returned is: <<    abc>>.
            GO
           
            DECLARE @StringVariable NVARCHAR(50);
            SET @StringVariable = N'<<%7.3s>>';

            RAISERROR (@StringVariable, -- Message text.
                       10, -- Severity,
                       1, -- State,
                       N'abcde'); -- First argument supplies the string.
            -- The message text returned is: <<    abc>>.
            GO

 

SQL Server 数据库中存储过程(PROCEDURE)的使用方法 通过合理设计和使用存储过程,可以简化复杂的数据库操作,增强代码的可维护性,并提升应用程序的整体性能。在这个示例中,我们创建了一个名为 GetEmployeeDetails 的存储过程,它接受一个 @EmployeeID 参数,并返回与该 EmployeeID 对应的员工信息。在这个示例中,存储过程 GetEmployeeName 接受一个 @EmployeeID 输入参数,并返回一个 @EmployeeName 输出参数,该参数包含员工的完整姓名。性能监控:定期监控存储过程的性能,确保其执行效率。 阅读详情

相关推荐

在SQL SERVER 中如何用脚本实现每日自动调用存储过程

摘要:SQLServer中实现存储过程每日自动执行需通过SQLServer代理作业完成:1)创建并测试存储过程逻辑;2)启用SQLServer代理服务并配置自动启动;3)创建作业、添加执行步骤、设置每日调度计划并绑定到作业;4)通过系统存储过程监控作业状态。注意事项包括权限要求、错误处理和性能优化,还可扩展配置多时段或单次执行方案。该方案适用于需要定期自动执行数据库维护任务的场景。

杜哥无敌的博客 1425

SQL Server数据库@@ERROR详解

SQL 中 @@ERROR的定义和应用

gly1653810310的博客 4307

后端开发:SQL 存储过程的错误处理

在现代后端开发中,数据库存储过程作为业务逻辑的重要载体,其稳定性和可靠性直接影响整个系统的质量。本文旨在全面系统地介绍SQL存储过程中的错误处理机制,帮助开发人员构建更加健壮的数据库应用。主流数据库系统(MySQL, SQL Server, Oracle, PostgreSQL)的错误处理机制存储过程中常见的错误类型和来源错误处理的核心概念和技术实际开发中的最佳实践和模式首先介绍核心概念和原理然后深入各种错误处理技术接着通过实际案例展示应用最后讨论高级主题和未来趋势。

架构师的AI之路,分享AI应用开发架构的学习与实践。 888

SQLSERVER存储过程的事务、trycatch

/** exec sp_test_Alley 1,’+templateId’ 正确返回1 异常返回0 **/ ALTER procedure [dbo].[sp_test_Alley] @id INT, @name VARCHAR(50) AS BEGIN BEGIN TRY --过程的try catch; begin try+end try 两个try之间包裹的代码就是捕获异常的代码,如果之间有问题就会捕获 BEGIN BEGIN TRAN; – begin tran :增加事务的代码,开始事务。跟tr

weixin_47863850的博客 2016

SQL Server数据库存储过程的错误处理

在CATCH块中,我们首先检查是否存在未提交的事务(@@TRANCOUNT > 0),如果存在,则回滚事务。通过使用TRY-CATCH块,我们可以在存储过程中实现异常处理,以确保系统的稳定性和数据的完整性。通过使用TRY-CATCH块,我们可以在存储过程中实现异常处理,以确保系统的稳定性和数据的完整性。在CATCH块中,我们可以捕获并处理异常。定义异常处理程序:在存储过程中,我们可以使用TRY-CATCH块来捕获和处理异常。定义异常处理程序:在存储过程中,我们可以使用TRY-CATCH块来捕获和处理异常。

ElServer的博客 1280

47、SQL Server错误处理与存储过程深入解析

本文深入解析了SQL Server中的错误处理机制和存储过程的使用。详细介绍了RAISERROR与THROW的区别、自定义错误消息的添加与删除、存储过程的优势与性能优化策略,以及递归在特定场景下的应用。同时探讨了扩展存储过程(XPs)的适用场景与限制。通过这些内容,帮助开发者更好地掌握SQL Server的高级特性,提高数据库性能与安全性。

meat5的博客 89

Sql Server 中关于@@ERROR的一个小误区()

Sql Server 中关于@@ERROR的一个小误区 我们经常写存储过程的时候会用到@@ERROR来判断执行是否成功,下面举例说明, DECLARE @NowTime DATETIME; BEGIN TRAN RAISERROR ('假设这里抛出异常!',16,1); SET @NowTim...

segclliwf的博客 537

掌握SQL Server错误处理与调试

本文深入探讨了SQL Server的错误处理和调试机制,包括传统的@@error系统函数和RAISERROR语句,以及TRY...CATCH错误处理块的新结构化方式。同时,介绍了Visual Studio提供的调试工具,展示如何在服务器端代码中逐步执行和调试。

weixin_31938351的博客 618

Sql Server 中关于@@ERROR的一个小小误区

我们经常写存储过程的时候会用到@@ERROR来判断执行是否成功,很久没有写复杂点的存储过程了,今天发现前段时间写的一个proc出现了bug,由于定义参数时,字符串长度设的有点短,导致传进来的值中间被截断,出现数据错乱的问题,才发现最后的一句: IF(@@ERROR<>0) BEGIN ROLLBACK TRAN END 前面明明已经出错了,可是在这里@@ERROR

Allec Cui的博客 4470

面板数据门槛归回分析,xthreg的安装,xthreg2安装包

我用的是Stata17,数据是不平衡的面板数据,需要用到xthreg2,虽然我找到了xthreg2.ado,但是还需要安装xthreg,因为运行xthreg2需要xthreg包顺带安装的lxthreg.mlib文件。但是!我后来发现还是不行,最后是去买了一个真正能用到xthreg2的lxthreg.mlib文件,才可以运行。

weixin_55252589的博客 1万+

9、 量子支持向量机:从经典到量子的跨越

本文详细介绍了量子支持向量机(QSVM)的基本原理及其在PennyLane和Qiskit框架中的实现方法。从经典SVM的基础知识出发,逐步深入到量子领域的应用,包括如何定义量子核函数、与scikit-learn集成以及在模拟器和实际量子计算机上的训练和评估过程。最后通过表格和流程图总结了不同框架下的实现要点,为未来量子机器学习的研究提供了参考。

weixin_42433737的博客 184

存储过程中使用事务和try catch

一、存储过程中使用事务的简单语法 在存储过程中使用事务时非常重要的,使用数据可以保持数据的关联完整性,在Sql server存储过程中使用事务也很简单,用一个例子来说明它的语法格式: 代码: Create Procedure MyProcedure( @Param1 nvarchar(10),@param2 nvarchar(10))ASBeginSet NO...

aptsvtb7338的博客 403

后台管理系统-7-vue3之引入配置文件baseURL

mock=false,本地模拟。mock=true,线上模拟。baseURL+url=实际请求的URL。get请求param参数,post请求data参数。

qq_20466211的博客 207

如何在 SQL Server 的存储过程和函数里进行错误处理(try catch)

SQL Server 2005里引进了try...catch结构,下面具体讲述如何使用,并介绍处理错误是用到的各种函数和变量,包括:ERROR_NUMBER(),ERROR_SAEVERITY(),ERROR_STATE(),ERROR_PROCEDURE(),ERROR_LINE(),ERROR_MESSAGE(),@@ERROR和RAISERROR     try...catch例子如下

lufanxing的专栏 3696

宇树科技嵌入式面试题及参考答案(春晚机器人的公司)

内存对齐是指在内存中为数据对象分配存储空间时,按照一定的规则将数据存储在特定的地址上,以提高内存访问效率。不同的数据类型在内存中都有其特定的对齐要求,例如,int类型通常要求 4 字节对齐,double类型通常要求 8 字节对齐。这意味着数据的存储地址必须是其对齐字节数的整数倍。如果不进行内存对齐,处理器在访问数据时可能需要进行多次内存访问,从而降低了访问效率。指令可以用于控制结构体内存布局,它允许程序员指定结构体成员的对齐方式。其基本用法是在结构体定义之前使用来指定对齐字节数n,其中n。

大模型大数据攻城狮的专栏 3224

【绝对要收藏-优秀论文范文】高项-度量绩效域

摘要:本文基于某水库数字孪生平台建设项目(2022.9-2023.5,645.97万元)的管理实践,从信息系统度量绩效域角度展开论述。项目构建了包含防洪调度等6大子系统的数字平台,实现洪水"四预"功能。重点分析了度量绩效域的五大要点:制定有效指标(如成本±8%偏差阈值)、多维数据采集、预警临界值设定、基于趋势的主动干预和持续改进机制。特别阐述了绩效问题的诊断方法,包括设备采购全周期成本分析、阶段性成本报告制度等。项目状态展示采用三维可视化看板,集成进度、成本、质量等多维度实时数据,最终实

xylllamm的博客 345

SQL server之存储过程练习

 对应于student数据库(1)  创建一个无参存储过程StuScoreInfo,查询以下信息:学号,姓名,性别,课程名称,考试成绩.use Studentgocreate proc StuScoreInfoas select student.sno,sname,ssex,cname,sc.gradefrom student,course,sc wherestudent.sno=sc.sno ...

蓝莓味的鱼 1万+

【LabVIEW面向对象编程01】简介

记得刚接触labview那会儿,领导让我在测试设备上写一个简单的日志记录程序,自己反反复复查阅资料才简单的写了一个实在是撇脚的程序,后来领导趁着工作之余给我大致讲解了几个函数的用法,然后简单的改了一下,程序就像突然有了灵魂一样,简单好用,从那时起就对labview产生了兴趣,一发不可收拾,那时经常一个人熬夜学习,现在已然没有那种动力了,哎,年轻就是好。接下来我们为学生类创建一个对象,新建一个VI,打开程序框图,直接将我们项目中的类拖到程序框图,它就成为一个实实在在的对象,我们将其命名为studentA。

weixin_43476034的博客 671

如何使用和优化SQL Server存储过程:全面指南

存储过程是一组经过预编译的SQL语句,它们被存储在数据库中,用户可以通过调用存储过程来执行相关的操作。与直接执行SQL查询不同,存储过程能够封装业务逻辑,避免重复编写相同的查询或更新操作。SQL Server存储过程是开发中非常强大的工具,它不仅可以封装复杂的业务逻辑,还能提高数据库操作的性能和安全性。通过合理使用存储过程,可以提高应用程序的维护性、可扩展性和效率。掌握存储过程的使用和优化技巧,对于任何SQL Server开发人员都是至关重要的。

net core ,前端 ,python 全栈开发 903

【大模型+知识图谱】哈工大版chinese-roberta-wwm-ext模型介绍、下载部署和GPU显卡配置

RoBERTa模型的一个重要改进版本,由阿里云的研究团队提出。而Chinese RoBERTa-wwm-ext则是针对中文文本的预训练模型,它在哈工大的研究团队手中进一步优化,特别适用于中文自然语言处理任务。

知识靠谱的博客 2772

Redis下载安装与配置(windows)

一、Redis下载 二、Redis安装 三、启动Redis临时服务并测试连接(可跳过) 四、Redis配置

欢迎订阅我的“JAVA全栈开发笔记(全)”专栏,价格优惠,仅需19.9元。 7万+

Sql Server 存储过程

摘自收集引言: 前面我们曾提到过,T-SQL是一门结构化查询语言。我们曾学习过C#语言的函数。使用函数时,需要两步。第一步:定义函数,它允许包含参数和返回值。第二步:调用函数,如果有参数还需传递参数,这样就执行了函数中的代码。函数可以反复调用,它方便了程序的模块化设计,大大提高了执行效率。 本章将讲解什么是存储过程,介绍常用的系统存储过程最后讲解如何创建并调用自定义存储过程,包括存储过程...

weixin_33782386的博客 1530

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

SQL SErver存储过程和用户自定义函数UDF

一、创建存储过程   存储过程可以输入参数、输出参数和返回值。其基本语法如下: eg:CREATE PROC myProc AS SELECT * FROM myTable; 二、使用ALTER修改存储过程 ALTER修改存储过程和视图的ALTER的工作原理一样,其不能修改存储过程的权限,并且保留了依赖关系; 三、删除存储过程 其语法如下: 四、参数化 声明参数的四个

无语的阿辉 1854

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

SQL server 存储过程的建立和调用

SQL server 存储过程的建立和调用存储过程的建立和调用--1.1准备测试需要的数据库:test,数据表:物料表,采购表if not exists (select * from master.dbo.sysdatabases where name='test')create database testgouse testgo if object_i...

weixin_34315665的博客 465

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

SQL SERVER存储过程中使用事务

 SQL SERVER存储过程中使用事务Create PROCEDURE UpdateWanjun@UserName nvarchar(500),@UserPassword nvarchar(500),@ReturnVal int outputAS       --Set XAcT_ABORT ON   Begin Transaction T       Update admins set Use

范志的专栏 3637

SQL SERVER存储过程

    SQL SERVER存储过程编写规范                                1          创建存储过程的语法use go if exist …      drop PROCEDURE .

xiaoyu_zhao1234的专栏 922
上一篇: 如何解决sql server2005的“不允许远程连接”错误.(how to resolve the error: "SQL Server does not allow remote connections" for SQL Server2005)
下一篇: 完美的Dos批处理实现sleep
赵大米
博客等级 码龄24年 5粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值