2

SQL Server 2000 ドキュメントなどの例を挙げる

Use Northwind
Go


Alter Procedure spu_UpdateOrderDetails(
@ProductID Int, 
@OrderId Int,
@ErrorCode Int OutPut,
@ErrorMessage Varchar(100) Output
)
As

UPDATE [Order Details]
SET ProductID = @ProductID
WHERE OrderID = @OrderId

Set @ErrorCode = @@ERROR

IF @ErrorCode <> 0
    Set @ErrorMessage = 'Some error ocurred'
GO


Declare @MyErrorCode Int
Declare @MyErrorMsg Varchar(100)

Exec spu_UpdateOrderDetails 999, 10248, @MyErrorCode OutPut, @MyErrorMsg OutPut

Print @MyErrorCode
Print @MyErrorMsg 

これにより外部キー エラーが発生し、@MyErrorMsg を適切に出力します。しかし、まだ醜い外部キーエラーが発生します。

アプリケーション内から実行すると、それは Delphi または Visual Studio である可能性がありますが、いまだに醜いエラー メッセージが表示されます。

カスタムエラーをユーザーに表示するために、エラーを「トラップ」するにはどうすればよいですか?

(新しい SQL Server バージョンでは Try/Catch が提供されていることは知っていますが、これは SQL Server 2000 です)

4

1 に答える 1

0

トランザクションに入れ、エラーが発生した場合はロールバックし、成功した場合はコミットします。

SET QUOTED_IDENTIFIER ON
SET ANSI_NULLS ON
GO

CREATE PROCEDURE spu_UpdateOrderDetails
AS

DECLARE @ErrorCode int
       --,@myRowCount int
       ,@ProductID  
       ,@OrderId 
       --,@ErrorMessage Varchar(100) Output


SET NOCOUNT ON

BEGIN TRAN 
    UPDATE [Order Details]
    SET ProductID = @ProductID
    WHERE OrderID = @OrderId

    SELECT @ErrorCode = @@ERROR--, @myRowCount = @@ROWCOUNT 
    IF @ErrorCode != 0 GOTO HANDLE_ERROR

COMMIT TRAN -- No Errors, so go ahead
RETURN 0

HANDLE_ERROR:
ROLLBACK TRAN
RETURN @ErrorCode
GO
于 2012-06-02T16:52:29.123 に答える