Sql server SQL Server 2000中正确使用@错误

Sql server SQL Server 2000中正确使用@错误,sql-server,sql-server-2000,Sql Server,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 = @Orde

以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 
使用北风
去
Alter Procedure spu\U UPDATEORDEAILS(
@ProductID Int,
@OrderId Int,
@错误代码Int输出,
@ErrorMessage Varchar(100)输出
)
作为
更新[订单详情]
设置ProductID=@ProductID
其中OrderID=@OrderID
设置@ErrorCode=@@ERROR
如果@ErrorCode 0
Set@ErrorMessage='出现了一些错误'
去
声明@MyErrorCode Int
声明@MyErrorMsg Varchar(100)
Exec spu_UpdateOrderDetails 999、10248、@MyErrorCode输出、@MyErrorMsg输出
打印@MyErrorCode
打印@MyErrorMsg
这将导致外键错误,我将正确打印@MyErrorMsg。 但我仍然得到丑陋的外键错误

现在,如果我在我的应用程序中运行,它可能是Delphi或Visual Studio,我仍然会收到丑陋的错误消息

我应该如何“捕获”错误,以便向用户显示自定义错误


(我知道较新的SQL Server版本提供了Try/Catch,但这是SQL Server 2000)

将其放入事务中,如果出现错误则回滚,如果成功则提交:

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

将其放入事务中,如果出错则回滚,如果成功则提交:

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

阅读关于SQL Server 2000错误处理的圣经,看看它是否有帮助:阅读关于SQL Server 2000错误处理的圣经,看看它是否有帮助:很抱歉,这仍然会将难看的外键错误返回给客户端。我认为答案是:就我阅读的mellamokb提供的文章而言,没有干净的解决方案。很抱歉,这仍然会将难看的外键错误返回给客户端。我认为答案是:就我所读的mellamokb提供的文章而言,没有干净的解决方案。