Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analysplattformssystem (PDW)
SQL-analysslutpunkt i Microsoft Fabric
Lager i Microsoft Fabric
SQL-databas i Microsoft Fabric
Returnerar felnumret för den senaste Transact-SQL satsen som kördes.
Transact-SQL syntaxkonventioner
Syntax
@@ERROR
Returtyper
integer
Anmärkningar
Returnerar 0 om föregående Transact-SQL-sats inte stötte på några fel.
Returnerar ett felnummer om föregående påstående stötte på ett fel. Om felet var ett av felen i sys.messages-katalogvyn, innehåller @@ERROR värdet från kolumnen sys.messages.message_id för det felet. Du kan se texten kopplad till ett @@ERROR felnummer i sys.messages.
Eftersom @@ERROR rensas och återställs vid varje utförd sats, kontrollera den direkt efter att den sats verifierats, eller spara den till en lokal variabel som kan kontrolleras senare.
Använd TRY... CATCH-konstruktionen för att hantera fel. FÖRSÖKET... CATCH-konstruktionen stöder också ytterligare systemfunktioner (ERROR_LINE, ERROR_MESSAGE, ERROR_PROCEDURE, ERROR_SEVERITY och ERROR_STATE) som returnerar mer felinformation än @@ERROR. FÖRSÖKA... CATCH stöder också en ERROR_NUMBER funktion som inte är begränsad till att returnera felnumret i satsen direkt efter den som genererade ett fel. Mer information finns i TRY... CATCH (Transact-SQL).
Examples
A. Att använda @@ERROR för att upptäcka ett specifikt fel
Följande exempel används @@ERROR för att kontrollera ett brott mot kontrollbegränsningar (fel #547) i ett UPDATE påstående.
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. Att använda @@ERROR för att villkorligt avsluta en procedur
Följande exempel använder IF...ELSE satser för att testa @@ERROR efter ett DELETE uttalande i en lagrad procedur. Variabelns värde @@ERROR bestämmer returkoden som skickas till det anropande programmet, vilket indikerar framgång eller misslyckande med proceduren.
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. Att använda @@ERROR med @@ROWCOUNT
Följande exempel använder @@ERROR med @@ROWCOUNT för att validera operationen av en UPDATE sats. Värdet av @@ERROR kontrolleras för eventuella indikationer på ett fel och @@ROWCOUNT används för att säkerställa att uppdateringen har tillämpats framgångsrikt på en rad i tabellen.
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
Se även
TRY... CATCH (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)
Referens för fel och händelser (databasmotor)