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,通常是一个指示给定操作影响了多少行的指示器-您不能返回其他内容,因此它会导致此转换错误