将varchar值'XY-21'转换为数据类型int时转换失败

时间:2014-03-12 11:38:20

标签: sql sql-server sql-server-2008 sql-server-2008-r2

我正在为变量分配下一个标识值并将其连接到字符串变量。但它给了我错误:

将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,但表具有正确的值。

1 个答案:

答案 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