返回ERROR_MESSAGE()作为sql server中的输出变量

时间:2016-01-08 19:23:57

标签: sql-server

我想在变量中返回ERROR_MESSAGE(),但这不起作用,因为就像提高错误但我不想那样。我想收到返回值(0 ok,1错误),加上变量@Id中插入的id以及此变量@ErrorMsg中的错误msg(如果有错误)

以下是代码:

CREATE PROCEDURE [cimpl].[TestInsert]
(
    @TestId INT,
    @Name NVARCHAR(50), 
    @Id INT OUTPUT,
    @ErrorMsg NVARCHAR(4000) = NULL OUTPUT 
)
AS
BEGIN

    DECLARE @ReturnVal int

    SET NOCOUNT ON;

    SET @ReturnVal = 0;
    SET @ErrorMsg = '';

    BEGIN TRY

        -- Insert statement
        INSERT [dbo].[Test]
                (
                  [TestId],
                  [Name]
                )
        VALUES  (
                  @TestId, 
                  @Name,                  
                )

        SET @Id = SCOPE_IDENTITY();

    END TRY

    BEGIN CATCH
        SET @ReturnVal = 1;
        SET @ErrorMsg = ERROR_MESSAGE();
    END CATCH

    RETURN @ReturnVal;

END

这是电话:

DECLARE @IdIns INT
DECLARE @ErrorM NVARCHAR(4000)
DECLARE @ReturnValue INT = 0

EXEC @ReturnValue = 
    [cimpl].[TransactInsert]
        @TestId= 'ee', --I'm forcing the error
        @Name = 'A', 
        @Id = @IdIns OUTPUT,
        @ErrorMsg = @ErrorM OUTPUT

SELECT @ErrorM
SELECT @ReturnValue
SELECT @IdIns

1 个答案:

答案 0 :(得分:0)

存储过程中的代码应该按预期工作。问题是您的测试在proc甚至运行之前抛出错误,因为您尝试将char值分配给整数。

在您的测试代码中:

@TestId= 'ee', --I'm forcing the error

这会在解析和编译时抛出错误,因为@TestId被定义为INT,但eeCHAR(2)值,无法合并为号。