印刷用ページ       送信     
クリックして評価とフィードバックをお寄せください
MSDN
MSDN ライブラリ
SQL Server
Microsoft SQL Server 2000
SDK ドキュメント
Transact-SQL リファレンス
 @@ERROR

  低帯域幅での表示をオンにする
Transact-SQL リファレンス
@@ERROR

最後に実行した Transact-SQL ステートメントのエラー番号を返します。

構文

@@ERROR

戻り値の型

int

解説

Microsoft® SQL Server™ による Transact-SQL ステートメントの実行が正常に終了すると、@@ERROR は 0 に設定されます。エラーが発生した場合、エラー メッセージを返します。別の Transact-SQL ステートメントを実行するまで、@@ERROR はエラー メッセージの番号を返します。sysmessages システム テーブルから @@ERROR エラー番号と関連するテキストを表示できます。

各ステートメントの実行時に @@ERROR はクリアおよびリセットされるので、ステートメントの確認を行った直後にこの変数の値を調べるか、または後で調べることができるようにローカル変数に保存します。

A.    @@ERROR を使用して特定のエラーを検出する

この例では、@@ERROR を使用して UPDATE ステートメントで CHECK 制約の違反 (エラー #547) がないかどうかを調べます。

USE pubs
GO
UPDATE authors SET au_id = '172 32 1176'
WHERE au_id = "172-32-1176"

IF @@ERROR = 547
   print "A check constraint violation occurred"
B.    @@ERROR を使用して条件的にプロシージャを終了する

この例では、ストアド プロシージャ内で INSERT ステートメントを実行した後、IF...ELSE ステートメントにより @@ERROR の値を調べます。@@ERROR 変数の値は、呼び出しプログラムに返された戻り値として採用され、プロシージャ実行の成否を示します。

USE pubs
GO

-- Create the procedure.
CREATE PROCEDURE add_author
@au_id varchar(11),@au_lname varchar(40),
@au_fname varchar(20),@phone char(12),
@address varchar(40) = NULL,@city varchar(20) = NULL,
@state char(2) = NULL,@zip char(5) = NULL,
@contract bit = NULL
AS

-- Execute the INSERT statement.
INSERT INTO authors
(au_id,  au_lname, au_fname, phone, address,
 city, state, zip, contract) values
(@au_id,@au_lname,@au_fname,@phone,@address,
 @city,@state,@zip,@contract)

-- Test the error value.
IF @@ERROR <> 0
BEGIN
   -- Return 99 to the calling program to indicate failure.
   PRINT "An error occurred loading the new author information"
   RETURN(99)
END
ELSE
BEGIN
   -- Return 0 to the calling program to indicate success.
   PRINT "The new author information has been loaded"
   RETURN(0)
END
GO
C.    @@ERROR を使用して複数のステートメントの実行の成否を調べる

この例の実行結果は、INSERT および DELETE ステートメントが正しく実行されたかどうかにより異なります。これらのステートメントの実行後、@@ERROR の値はローカル変数に設定され、これらのステートメントが共有するエラー処理ルーチンで使用されます。

USE pubs
GO
DECLARE @del_error int, @ins_error int
-- Start a transaction.
BEGIN TRAN

-- Execute the DELETE statement.
DELETE authors
WHERE au_id = '409-56-7088'

-- Set a variable to the error value for
-- the DELETE statement.
SELECT @del_error = @@ERROR

-- Execute the INSERT statement.
INSERT authors
   VALUES('409-56-7008', 'Bennet', 'Abraham', '415 658-9932',
   '6223 Bateman St.', 'Berkeley', 'CA', '94705', 1)
-- Set a variable to the error value for
-- the INSERT statement.
SELECT @ins_error = @@ERROR

-- Test the error values.
IF @del_error = 0 AND @ins_error = 0
BEGIN
   -- Success. Commit the transaction.
   PRINT "The author information has been replaced"
   COMMIT TRAN
END
ELSE
BEGIN
   -- An error occurred. Indicate which operation(s) failed
   -- and roll back the transaction.
   IF @del_error <> 0
      PRINT "An error occurred during execution of the DELETE
      statement."

   IF @ins_error <> 0
      PRINT "An error occurred during execution of the INSERT
      statement."

   ROLLBACK TRAN
END
GO
D.    @@ERROR と @@ROWCOUNT を使用する

この例では、@@ROWCOUNT と @@ERROR を使用して、UPDATE ステートメント操作の有効性の検査を行います。エラーがないかどうか、@@ERROR の値を調べます。@@ROWCOUNT を使用して、テーブルの行を正しく更新できたことを確認します。

USE pubs
GO
CREATE PROCEDURE change_publisher
@title_id tid,
@new_pub_id char(4)
AS

-- Declare variables used in error checking.
DECLARE @error_var int, @rowcount_var int

-- Execute the UPDATE statement.
UPDATE titles SET pub_id = @new_pub_id
WHERE title_id = @title_id

-- Save the @@ERROR and @@ROWCOUNT values in local
-- variables before they are cleared.
SELECT @error_var = @@ERROR, @rowcount_var = @@ROWCOUNT

-- Check for errors. If an invalid @new_pub_id was specified
-- the UPDATE statement returns a foreign-key violation error #547.
IF @error_var <> 0
BEGIN
   IF @error_var = 547
   BEGIN
      PRINT "ERROR: Invalid ID specified for new publisher"
      RETURN(1)
   END
   ELSE
   BEGIN
      PRINT "ERROR: Unhandled error occurred"
      RETURN(2)
   END
END

-- Check the rowcount. @rowcount_var is set to 0
-- if an invalid @title_id was specified.
IF @rowcount_var = 0
BEGIN
   PRINT "Warning: The title_id specified is not valid"
   RETURN(1)
END
ELSE
BEGIN
   PRINT "The book has been updated with the new publisher"
   RETURN(0)
END
GO

関連項目

@@ROWCOUNT

SET @local_variable

sysmessages

システム関数

© 2009 Microsoft Corporation. All rights reserved. 使用条件  |  商標  |  プライバシー
Page view tracker