Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Base de Dados SQL do Azure
Instância Gerida do Azure SQL
Azure Synapse Analytics
Sistema de Plataforma de Análise (PDW)
Ponto de Extremidade de Análise SQL no Microsoft Fabric
Armazém no Microsoft Fabric
Base de Dados SQL no Microsoft Fabric
Devolve o número de erro da última Transact-SQL instrução executada.
Transact-SQL convenções de sintaxe
Sintaxe
@@ERROR
Tipos de devolução
número inteiro
Observações
Retorna 0 se a instrução Transact-SQL anterior não encontrou erros.
Devolve um número de erro se a instrução anterior tiver encontrado um erro. Se o erro foi um dos erros na vista de catálogo do sys.messages, então @@ERROR contém o valor da coluna sys.messages.message_id para esse erro. Pode ver o texto associado a um número de erro @@ERROR no sys.messages.
Como @@ERROR é apagado e reiniciado em cada instrução executada, verifique-a imediatamente após a verificação da instrução ou guarde-a numa variável local que possa ser verificada mais tarde.
Usa o TRY... CATCH para lidar com erros. O TRY... O constructo CATCH também suporta funções adicionais do sistema (ERROR_LINE, ERROR_MESSAGE, ERROR_PROCEDURE, ERROR_SEVERITY e ERROR_STATE) que retornam mais informação de erro do que a @@ERROR. TENTA... O CATCH também suporta uma função ERROR_NUMBER que não se limita a devolver o número de erro na instrução imediatamente após a instrução que gerou o erro. Para obter mais informações, consulte TRY... CATCH (Transact-SQL).
Examples
A. Usar @@ERROR para detetar um erro específico
O exemplo seguinte serve @@ERROR para verificar uma violação de restrição de verificação (erro #547) numa UPDATE instrução.
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. Usar @@ERROR para sair condicionalmente de um procedimento
O exemplo seguinte utiliza IF...ELSE instruções para testar @@ERROR após uma DELETE instrução num procedimento armazenado. O valor da @@ERROR variável determina o código de retorno enviado ao programa que chama, indicando sucesso ou falha do procedimento.
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. Usar @@ERROR com @@ROWCOUNT
O exemplo seguinte usa @@ERROR com @@ROWCOUNT para validar a operação de uma UPDATE sentença. O valor de @@ERROR é verificado para qualquer indicação de erro e @@ROWCOUNT é usado para garantir que a atualização foi aplicada com sucesso a uma linha da tabela.
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
Ver também
TENTE... CAPTURAR (Transact-SQL)
LINHA_ERRO (Transact-SQL)
MENSAGEM_DE_ERRO (Transact-SQL)
ERROR_NUMBER (Transact-SQL)
PROCEDIMENTO_ERRO (Transact-SQL)
ERROR_SEVERITY (Transact-SQL)
ERROR_STATE (Transact-SQL)
@@ROWCOUNT (Transact-SQL)
sys.messages (Transact-SQL)
Referência de erros e eventos (Mecanismo de Banco de Dados)