SQLServer 使用 @@ERROR-阿里云开发者社区

开发者社区> 开发与运维> 正文
登录阅读全文

SQLServer 使用 @@ERROR

简介: 原文:SQLServer 使用 @@ERROR 使用 @@ERROR 如果最后的 Transact-SQL 语句执行成功,则 @@ERROR 系统函数返回 0;如果此语句产生错误,则 @@ERROR 返回错误号。

原文:SQLServer 使用 @@ERROR

使用 @@ERROR

如果最后的 Transact-SQL 语句执行成功,则 @@ERROR 系统函数返回 0;如果此语句产生错误,则 @@ERROR 返回错误号。每一个 Transact-SQL 语句完成时,@@ERROR 的值都会改变。

因为每个 Transact-SQL 语句执行完毕时,@@ERROR 都会得到一个新的值,@@ERROR 可用以下两种方法处理:

  • 在 Transact-SQL 语句后,马上检测或使用 @@ERROR。

  • 在 Transact-SQL 语句完成后,马上把 @@ERROR 存储到一个整型变量中。此变量的值可供以后使用。

在生成错误的批处理、存储过程或触发器中,@@ERROR 是 Microsoft® SQL Server™ 2000 错误的唯一可用部分。错误的所有其它部分,如严重度、状态、包含替换字符串(如对象名称)的消息文本,都只返回到那些能够用 API 错误处理机制进行错误处理的应用程序中。同时,@@ERROR 只由错误产生,而不由警告产生;因此,批处理、存储过程和触发器对于那些可能已经产生了的警告没有可见性。

@@ERROR 通常用于表示存储过程的成功或失败。整型变量初始化为 0。完成每个 Transact-SQL 语句后,都要测试 @@ERROR 是否为 0。如果 @@ERROR 不是 0,将被存储在变量中。存储过程然后在 RETURN 语句中返回变量。如果过程中的 Transact-SQL 语句都没有错误,变量保持为 0。如果一个或多个语句生成错误,则变量包含最后的错误号。下面是有此逻辑的简单存储过程:

USE NorthwindGODROP 
-- PROCEDURE SampleProcedureGO
-- CREATE a procedure that takes one input parameter
-- and returns one output parameter and a return code.
CREATE PROCEDURE SampleProcedure
    @EmployeeIDParm INT ,
    @MaxQuantity INT OUTPUT
AS -- Declare and initialize a variable to hold @@ERROR.
    BEGIN 
        DECLARE @ErrorSave INT
        SET @ErrorSave = 0 --  Do a SELECT using the input parameter.
        SELECT  FirstName ,
                LastName ,
                Title
        FROM    Employees
        WHERE   EmployeeID = @EmployeeIDParm -- Save any non-zero @@ERROR value.
        IF ( @@ERROR <> 0 )
            SET @ErrorSave = @@ERROR-- Set a value in the output parameter.
        SELECT  @MaxQuantity = MAX(Quantity)
        FROM    [Order Details]-- Save any non-zero @@ERROR value.
        IF ( @@ERROR <> 0 )
            SET @ErrorSave = @@ERROR-- Returns 0 if neither SELECT statement had -- an error, otherwise returns the last error.
        RETURN @ErrorSave
    END 
GO

 

也有 @@ERROR 与 @@ROWCOUNT 一起使用的时候。在以下的示例中,@@ERROR 用于确定是否出现违反约束的错误,而 @@ROWCOUNT 则在一些行被成功更改的情况下,用于确定由 UPDATE 语句修改的行数。

BEGIN TRAN  UPDATE Northwind.dbo.Products  SET UnitPrice = UnitPrice * 1.1  WHERE CategoryID 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章
最新文章
相关文章