Sdílet prostřednictvím


@@ERROR (Transact-SQL)

Platí pro:SQL ServerAzure SQL DatabaseSpravovaná instance Azure SQLAzure Synapse AnalyticsAnalytics Platform System (PDW)Koncový bod analýzy SQL v Microsoft FabricSklad v Microsoft FabricDatabáze SQL v Microsoft Fabric

Vrátí chybové číslo pro poslední vykonaný příkaz Transact-SQL.

Transact-SQL konvence syntaxe

Syntaxe

@@ERROR  

Návratové typy

integer

Poznámky

Vrátí 0, pokud předchozí Transact-SQL příkaz nenarazil na žádné chyby.

Vrací chybové číslo, pokud předchozí příkaz narazil na chybu. Pokud byla chyba jednou z chyb v zobrazení katalogu sys.messages, pak @@ERROR obsahuje hodnotu ze sloupce sys.messages.message_id pro tuto chybu. Text spojený s @@ERROR chybovým číslem si můžete prohlédnout v sys.messages.

Protože @@ERROR je vymazána a resetována při každém provedeném příkazu, zkontrolujte jej ihned po ověření příkazu, nebo jej uložte do lokální proměnné, kterou lze později zkontrolovat.

Použij TRY... Konstrukce CATCH pro zpracování chyb. POKUS... Konstrukce CATCH také podporuje další systémové funkce (ERROR_LINE, ERROR_MESSAGE, ERROR_PROCEDURE, ERROR_SEVERITY a ERROR_STATE), které vracejí více chybových informací než @@ERROR. ZKUSIT... CATCH také podporuje funkci ERROR_NUMBER, která není omezena na vrácení chybového čísla ve příkazu bezprostředně po příkazu, který chybu generoval. Další informace najdete v tématu TRY...CATCH (Transact-SQL).

Examples

A. Použití @@ERROR k detekci konkrétní chyby

Následující příklad slouží ke @@ERROR kontrole porušení kontrolního omezení (chyba #547) ve příkazu UPDATE .

USE AdventureWorks2022;  
GO  
UPDATE HumanResources.EmployeePayHistory  
    SET PayFrequency = 4  
    WHERE BusinessEntityID = 1;  
IF @@ERROR = 547
    BEGIN
    PRINT N'A check constraint violation occurred.';
    END
GO  

B. Použití @@ERROR k podmíněnému ukončení procedury

Následující příklad používá IF...ELSE příkazy k testování @@ERROR po příkazu DELETE v uložené procedurě. Hodnota @@ERROR proměnné určuje zpětný kód zaslaný volajícímu programu, který indikuje úspěch nebo neúspěch procedury.

USE AdventureWorks2022;  
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  

C. Používání @@ERROR s @@ROWCOUNT

Následující příklad používá @@ERROR s k @@ROWCOUNT ověření operace příkazu UPDATE . Hodnota se @@ERROR kontroluje pro jakoukoli indikaci chyby a @@ROWCOUNT slouží k ověření, že aktualizace byla úspěšně aplikována na řádek tabulky.

USE AdventureWorks2022;  
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  

Viz také

VYZKOUŠET... ZACHYTIT (Transact-SQL)
ERROR_LINE (Transact-SQL)
ERROR_MESSAGE (Transact-SQL)
ERROR_NUMBER (Transact-SQL)
ERROR_PROCEDURE (Transact-SQL)
ERROR_SEVERITY (Transact-SQL)
ERROR_STATE (Transact-SQL)
@@ROWCOUNT (Transact-SQL)
sys.messages (Transact-SQL)
Referenční dokumentace k chybám a událostem (databázový stroj)