SQL中的@@Error的使用
类别:数据库 浏览量:1851
时间:2013-9-16 SQL中的@@Error的使用
SQL中的@@Error的使用如果最后的 Transact-SQL 语句执行成功,则 @@ERROR 系统函数返回 0;如果此语句产生错误,则 @@ERROR 返回错误号。每一个 Transact-SQL 语句完成时,@@ERROR 的值都会改变。
因为每个 Transact-SQL 语句执行完毕时,@@ERROR 都会得到一个新的值,@@ERROR 可用以下两种方法处理:
-
在 Transact-SQL 语句后,马上检测或使用 @@ERROR。
- 在 Transact-SQL 语句完成后,马上把 @@ERROR 存储到一个整型变量中。此变量的值可供以后使用。
@@ERROR 通常用于表示存储过程的成功或失败。整型变量初始化为 0。完成每个 Transact-SQL 语句后,都要测试 @@ERROR 是否为 0。如果 @@ERROR 不是 0,将被存储在变量中。存储过程然后在 RETURN 语句中返回变量。如果过程中的 Transact-SQL 语句都没有错误,变量保持为 0。如果一个或多个语句生成错误,则变量包含最后的错误号。
实例:
1、用 @@ERROR 检测一个特定错误
以下示例用 @@ERROR 在 UPDATE 语句中检测约束检查冲突(错误 #547)。
USE AdventureWorks2012; GO UPDATE HumanResources.EmployeePayHistory SET PayFrequency = 4 WHERE BusinessEntityID = 1; IF @@ERROR = 547 PRINT N'A check constraint violation occurred.'; GO
2、用 @@ERROR 有条件地退出一个过程
以下示例使用 IF...ELSE 语句在存储过程中测试 INSERT 语句后的 @@ERROR 变量的值将确定发送给调用程序的返回代码,以指示此过程的成功与失败。
USE AdventureWorks2012;
GO
-- Drop the procedure if it already exists.
IF OBJECT_ID(N'HumanResources.usp_DeleteCandidate', N'P') IS NOT NULL
DROP PROCEDURE HumanResources.usp_DeleteCandidate;
GO
-- Create the procedure.
CREATE PROCEDURE HumanResources.usp_DeleteCandidate
(
@CandidateID INT
)
AS
-- Execute the DELETE statement.
DELETE FROM HumanResources.JobCandidate
WHERE JobCandidateID = @CandidateID;
-- Test the error value.
IF @@ERROR <> 0
BEGIN
-- Return 99 to the calling program to indicate failure.
PRINT N'An error occurred deleting the candidate information.';
RETURN 99;
END
ELSE
BEGIN
-- Return 0 to the calling program to indicate success.
PRINT N'The job candidate has been deleted.';
RETURN 0;
END;
GO
3、与 @@ROWCOUNT 一同使用 @@ERROR
下面的示例将 @@ERROR 与 @@ROWCOUNT 一起使用来验证一条 UPDATE 语句的操作。为任何可能出现的错误而检验 @@ERROR,并且用 @@ROWCOUNT 保证更新已成功应用于表中的某行。
USE AdventureWorks2012; GO IF OBJECT_ID(N'Purchasing.usp_ChangePurchaseOrderHeader',N'P')IS NOT NULL DROP PROCEDURE Purchasing.usp_ChangePurchaseOrderHeader; GO CREATE PROCEDURE Purchasing.usp_ChangePurchaseOrderHeader ( @PurchaseOrderID INT ,@BusinessEntityID INT ) AS -- Declare variables used in error checking. DECLARE @ErrorVar INT; DECLARE @RowCountVar INT; -- Execute the UPDATE statement. UPDATE PurchaseOrderHeader SET BusinessEntityID = @BusinessEntityID WHERE PurchaseOrderID = @PurchaseOrderID; -- Save the @@ERROR and @@ROWCOUNT values in local -- variables before they are cleared. SELECT @ErrorVar = @@ERROR ,@RowCountVar = @@ROWCOUNT; -- Check for errors. If an invalid @BusinessEntityID was specified, -- the UPDATE statement returns a foreign key violation error #547. IF @ErrorVar <> 0 BEGIN IF @ErrorVar = 547 BEGIN PRINT N'ERROR: Invalid ID specified for new employee.'; RETURN 1; END ELSE BEGIN PRINT N'ERROR: error ' + RTRIM(CAST(@ErrorVar AS NVARCHAR(10))) + N' occurred.'; RETURN 2; END END -- Check the row count. @RowCountVar is set to 0 -- if an invalid @PurchaseOrderID was specified. IF @RowCountVar = 0 BEGIN PRINT 'Warning: The BusinessEntityID specified is not valid'; RETURN 1; END ELSE BEGIN PRINT 'Purchase order updated with the new employee'; RETURN 0; END; GO
您可能感兴趣
- mysql按端口查找配置(MySQL中给定父行找到所有子行的解决方案)
- sqlserver2000升级教程(MSSQL 2000 使用帮助sql server简明教程)
- mysql清空数据库所有表格(MySQL用truncate命令快速清空一个数据库中的所有表)
- 如何重新配置mysql的端口(如何快速修改MySQL用户的host属性)
- mysql详细笔记(MySQL的内存表的基础学习教程)
- SQL Server中@@ROWCOUNT的用法
- sqlserver登录身份验证(SQL Server 2012 身份验证Authentication)
- sqlserver2016使用教程(SQL Server 2016 Alwayson新增功能图文详解)
- MySql开启远程连接
- centos7可以装mysql吗(详解腾讯云CentOS7.0使用yum安装mysql及使用遇到的问题)
- SQL Server免费版的安装以及使用SQL Server Management Studio(SSMS)连接数据库的图文方法(SQL Server免费版的安装以及使用SQL Server Management StudioSSMS连接数据库的图文方法)
- mysql是自动commit吗(详解MySQL与Spring的自动提交autocommit)
- sql server 实例功能(SQL Server简单查询示例汇总)
- mysql访问被拒绝(nacos无法连接mysql的解决方法)
- mysql实现数据的备份的命令(Windows下MySQL定时备份脚本的实现)
- 终于有人将mysql 索引讲清楚了(MySQL 索引的一些细节分享)
- 14岁丧父 20岁丧母,从苦难走向辉煌的银泰创始人沈国军(14岁丧父20岁丧母从苦难走向辉煌的银泰创始人沈国军)
- 银泰集团董事长沈国军获评 北京影响力 十大企业家(银泰集团董事长沈国军获评)
- 15帅气男士发型,清爽时尚很有型,喜欢就试试(清爽时尚很有型)
- 哪几个历史人物被影协主席李雪健演的活灵活现(哪几个历史人物被影协主席李雪健演的活灵活现)
- 王伦狭隘,晁盖霸道,宋江奸诈骨头软,只有鲁智深才适合当寨主(王伦狭隘晁盖霸道)
- 他是梁山最早的头目,江湖人称 旱地忽律 ,宋江几乎将其遗忘(他是梁山最早的头目)
热门推荐
- python里面的time如何用(详解python:time模块用法)
- mysql自增锁(深入剖析 MySQL 自增锁)
- 如何编写更好的CSS
- laravel框架保存数据(Laravel 数据库加密及数据库表前缀配置方法)
- ASP.NET中使用CodeDomProvider调用js文件中的js方法
- mysqlgroupby语句实现原理(Mysql中错误使用SQL语句Groupby被兼容的情况)
- ftp服务器的安装与配置(详解ftp环境配置解决方案vsftpd)
- 看懂云服务器带宽大小的区别(云服务器的流量与带宽是如何换算?)
- zabbix如何配置监控(zabbix监控mysql的实例方法)
- 如何获取html5表单中的元素的值(html5 datalist 选中option选项后的触发事件)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9