Sql server 在sql server中将错误消息()作为输出变量返回
我想在变量中返回ERROR_MESSAGE(),但这不起作用,因为这类似于引发错误,但我不希望这样。我想接收返回值(0 ok,1 error),加上变量@id中插入的id,如果有错误,则加上变量@ErrorMsg中的error msg 代码如下:Sql server 在sql server中将错误消息()作为输出变量返回,sql-server,Sql Server,我想在变量中返回ERROR_MESSAGE(),但这不起作用,因为这类似于引发错误,但我不希望这样。我想接收返回值(0 ok,1 error),加上变量@id中插入的id,如果有错误,则加上变量@ErrorMsg中的error msg 代码如下: CREATE PROCEDURE [cimpl].[TestInsert] ( @TestId INT, @Name NVARCHAR(50), @Id INT OUTPUT, @ErrorMsg NVARCHAR(4
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
存储过程中的代码应按预期工作。问题是您的测试在进程运行之前抛出了一个错误,因为您试图将一个字符值分配给一个整数 在测试代码中:
@TestId= 'ee', --I'm forcing the error
这会在解析和编译时抛出一个错误,因为
@TestId
被定义为INT
,然而ee
是一个CHAR(2)
值,不能合并成一个数字。你看过下面的帖子吗:我不喜欢这种方法,还有其他方法吗?我不想引起错误,我只想得到作为输出的错误消息。我不确定“解析和编译时”是什么意思,但对我来说,它在调用过程时中断了。我认为错误发生在将char值赋给int参数(或绑定或任何调用)时。因此,永远不会到达proc的错误处理程序,但错误仍然发生在运行时,而不是编译或解析时。