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)
有什么建议?
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)