我正在为变量分配下一个标识值并将其连接到字符串变量。但它给了我错误:
将varchar值'XY-21'转换为数据类型int时,转换失败。
程序如下:
ALTER PROCEDURE [dbo].[SPInsertNewDetail]
(
@MLNo varchar(20)= null,
@MCL varchar(20)= null, --Suppose it has value XY-
@MCCL VARCHAR(20) OUTPUT
)
AS
DECLARE @Next_Id int
SELECT @Next_Id = IDENT_CURRENT('New_Master') + IDENT_INCR('New_Master') //Suppose it is 21
PRINT @Next_Id
SET @MCCL = @MCL + cast(@Next_Id as varchar)
PRINT @MCCL
INSERT INTO New_Master
(MCCL, MLNo)
VALUES (@MCCL, @MLNo)
PRINT @MCCL
RETURN @MCCL
当我运行过程时,它将@MCCL返回为null,但表具有正确的值。
答案 0 :(得分:3)
问题来自RETURN @MCCL
行。 SQL中的RETURN
语句仅用于返回INT
类型。对于输出,您不需要包含RETURN
。如果删除该行,则proc将起作用。我也会将其修改为以下内容。
ALTER PROCEDURE [dbo].[SPInsertNewDetail]
(
@MLNo VARCHAR(20) = NULL
,@MCL VARCHAR(20) = NULL
,@MCCL VARCHAR(20) OUTPUT
)
AS
BEGIN
DECLARE @Next_Id INT
SELECT @Next_Id = IDENT_CURRENT('New_Master') + IDENT_INCR('New_Master')
PRINT @Next_Id
SET @MCCL = @MCL + CAST(@Next_Id AS VARCHAR)
PRINT @MCCL
INSERT INTO New_Master
( MCCL, MLNo )
VALUES ( @MCCL, @MLNo )
PRINT @MCCL
END
如果在参数SQL服务器上指定了OUTPUT
,则必须在程序完成执行后返回它。这是OUTPUT
变量的简单测试。
CREATE PROCEDURE [dbo].TEST_Out
(
@pSPIn VARCHAR(10)
,@pSPOut VARCHAR(10) OUTPUT
)
AS
BEGIN
SET @pSPOut = @pSPIn + ' ' + 'this'
END
DECLARE @stuff VARCHAR(20);
EXEC dbo.TEST_Out
@pSPIn = 'blog'
,@pSPOut = @stuff OUTPUT
PRINT @stuff