Sql server TSQL-输出参数的转换失败

Sql server TSQL-输出参数的转换失败,sql-server,tsql,stored-procedures,Sql Server,Tsql,Stored Procedures,我有以下程序 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED --re runnable. IF EXISTS (SELECT 1 FROM sys.objects WHERE name = 'spGetMessageArray' AND type = 'P' ) BEGIN DROP PROCEDURE dbo.spGetMessageArray END GO CREATE PROCEDURE dbo.s

我有以下程序

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
--re runnable. 
IF EXISTS (SELECT 1 FROM sys.objects WHERE name = 'spGetMessageArray' AND type = 'P' )
    BEGIN 
        DROP PROCEDURE dbo.spGetMessageArray
    END 
GO

CREATE PROCEDURE dbo.spGetMessageArray
    @message VARCHAR(50),
    @messageArray VARCHAR(50) OUTPUT
AS
BEGIN
    SET NOCOUNT ON 
    SELECT @messageArray = (SELECT CAST(MessageId AS VARCHAR(5))+','
                            FROM Messages
                            WHERE Message = @message
                            FOR XML Path(''))

    -- Remove trailing comma if necessary
    SELECT @messageArray = LEFT(@messageArray, LEN(@messageArray) - 1)

    RETURN @messageArray
END
当我将其作为一个查询而不是sp运行时,我会得到我想要的结果33、44、53作为逗号分隔的字符串

当我称之为使用

DECLARE @message  VARCHAR(50) = 'Safety'
DECLARE @messageArray VARCHAR(50) =''

EXEC dbo.spGetMessageArray @message, @messageArray = @messageArray OUTPUT

PRINT  @messageArray
我得到一个错误:

将varchar值“33,44,53”转换为数据类型int时,转换失败


谁能解释一下我的误解。我猜INT是受影响行数的某种形式。我只是被那个该死的int弄糊涂了。据我所知,我只是使用VARCHAR

你不返回输出参数-返回的值是你设置该变量的最后值。用于指示程序的状态,必须始终为int。噢,我的天哪。谢谢你,好先生!存储过程的返回值必须始终为INT,通常是一个指示给定操作影响了多少行的指示器-您不能返回其他内容,因此它会导致此转换错误