Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
Azure SQL Database
Spravovaná instance Azure SQL
Azure Synapse Analytics
Analytics Platform System (PDW)
Koncový bod analýzy SQL v Microsoft Fabric
Sklad v Microsoft Fabric
Databáze SQL v Microsoft Fabric
Vrátí chybové číslo pro poslední vykonaný příkaz Transact-SQL.
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)