Aracılığıyla paylaş


@@ ERROR (Transact-SQL)

Son hata numarasını döndürür. Transact-SQL deyim yürütüldü.

Topic link iconTransact-SQL sözdizimi kuralları

@@ERROR

Dönüş Türleri

tamsayı

Remarks

0 Döndürür önceki Transact-SQL deyim hata ile karşılaştı.

Önceki deyim bir hatayla karşılaştı hata numarasını döndürür.Daha sonra hata sys.messages katalog görünümündeki hatalardan biri, @@ ERROR sys.messages.message_id sütun bu hata için değeri içerir.@@ ERROR hata numarasını sys.messages bir ilişkili metin görüntüleyebilirsiniz.

@@ ERROR temizlendi ve yürütülen her ekstresinde sıfırlamak için Microsoft Windows XP, doğrulanmakta olan deyim hemen denetleyin veya daha sonra teslim yerel bir değişkene kaydedin.

TRY,... CATCH yapýsý hataları işlemek için kullanın.TRY,... CATCH yapısı da @@ ERROR'den daha fazla hata bilgisi veren ek sistem işlevleri (ERROR_LINE ERROR_MESSAGE, ERROR_PROCEDURE, ERROR_SEVERITY ve ERROR_STATE) destekler.TRY... CATCH de bir ERROR_NUMBER destekler işlev hata oluşturan hemen deyiminden sonraki deyime deyiminde hata numarasını döndürerek sınırlı değildir.Daha fazla bilgi için bkz:... CATCH (Transact-SQL) TRY.

Örnekler

C.Belirli bir hata algılamaya @@ ERROR kullanın.

Bu örnek, @@ ERROR içinde bir UPDATE deyim onay kısıtlama ihlali (hata # 547) denetlemek için kullanır.

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

b.Koşullu bir yordam çıkmak için @@ ERROR kullanın.

IF... ELSE ifadeleri bu örnekte, sonra bir INSERT deyim, saklı bir yordam @@ ERROR sınayın.@@ ERROR değişken değeri için başarı veya başarısızlık yordamın gösteren çağıran program için gönderilen dönüş kodu belirler.

USE AdventureWorks;
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.@@ ERROR @@ ROWCOUNT'ile kullanın...

Bu örnek, bir UPDATE deyim işlemini doğrulamak için ROWCOUNT @@ ile @@ ERROR kullanır.@@ ERROR değeri herhangi bir hata göstergesi için denetlenir ve @@ ROWCOUNT güncelleştirmenin tablosundaki bir satıra başarıyla uygulandığından emin olmak için kullanılır.

USE AdventureWorks;
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
    ,@EmployeeID INT
   )
AS
-- Declare variables used in error checking.
DECLARE @ErrorVar INT;
DECLARE @RowCountVar INT;

-- Execute the UPDATE statement.
UPDATE PurchaseOrderHeader 
    SET EmployeeID = @EmployeeID 
    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 @EmployeeID 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 EmployeeID specified is not valid';
        RETURN 1;
    END
ELSE
    BEGIN
        PRINT 'Purchase order updated with the new employee';
        RETURN 0;
    END;
GO