应该没有转换时存储过程返回转换错误

Chi*_*Liu 1 sql t-sql sql-server

我有一个只返回a的存储过程varchar(1000),但是当我使用以下块运行时:

declare @P1 VARCHAR(1000) 
SET @P1='' 
PRINT 'P1='+@P1
exec Test @PhoneNumber='1234567890',@AgentID=N'Test AgentID',@SP_RETURN=@P1 output  
PRINT 'P1='+@P1
Run Code Online (Sandbox Code Playgroud)

我明白了

消息50000,级别16,状态1,过程测试,第50
行将varchar值'Complete'转换为数据类型int时转换失败.

Msg 245,Level 16,State 1,Procedure Test,Line 60
将varchar值'Exception raise'转换为数据类型int时转换失败.

这是存储过程:

Create PROCEDURE [dbo].[Test]  
    @PhoneNumber as CHAR(10),  
    @AgentID as VARCHAR(100),  
    @SP_RETURN as VARCHAR(1000) OUTPUT,  
    @UTCDateTimeOverride as Datetime = NULL  
AS  
BEGIN  
 BEGIN TRY  
  SET @SP_RETURN = N'Complete'
  RETURN @SP_RETURN  
 END TRY  

 BEGIN CATCH  
  SET @SP_RETURN = N'Exception raised'
  RETURN @SP_RETURN  
 END CATCH  
END  
go
Run Code Online (Sandbox Code Playgroud)

有什么建议?

rad*_*dar 5

stored procedure 始终返回整数,用于返回错误代码

您正在返回varchar导致异常的字段

错误是由此引起的

RETURN @SP_RETURN
Run Code Online (Sandbox Code Playgroud)

这样做

  BEGIN TRY  
  SET @SP_RETURN = N'Complete'
  RETURN 0  -- success
  END TRY  

  BEGIN CATCH  
  SET @SP_RETURN = N'Exception raised'
  RETURN  ERROR_NUMBER()  -- error code
Run Code Online (Sandbox Code Playgroud)