我想在变量中返回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
答案 0 :(得分:0)
存储过程中的代码应该按预期工作。问题是您的测试在proc甚至运行之前抛出错误,因为您尝试将char值分配给整数。
在您的测试代码中:
@TestId= 'ee', --I'm forcing the error
这会在解析和编译时抛出错误,因为@TestId
被定义为INT
,但ee
是CHAR(2)
值,无法合并为号。