2012-06-01 5 views
2

Принимая любой пример для SQL Server 2000 документации, или что-то вродеПравильное использование @@ Ошибка в 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 

это вызовет ошибки внешнего ключа, и я WLL печати @MyErrorMsg правильно. Но я все еще получаю уродливую ошибку внешнего ключа.

Теперь, если я запускаю из своего приложения, это может быть Delphi или Visual Studio, я все равно получаю уродливое сообщение об ошибке.

Как я могу «заманить» ошибку, чтобы я отображал пользовательскую ошибку пользователю?

(я знаю, что более новые версии SQL Server обеспечивает Try/Поймать, но это SQL Server 2000)

+2

Прочитайте Библию по обработке ошибок SQL Server 2000 и посмотрите, помогает ли она: http://www.sommarskog.se/error-handling-I.html#whathappens – mellamokb

ответ

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 
+0

Прошу прощения, но это все еще возвращает уродливую ошибку внешнего ключа для клиента. Я думаю, что ответ таков: нет чистого решения, насколько я читал статью, предоставленную mellamokb. –