【问题标题】:Conversion failed when converting the varchar value 'XY-21' to data type int将 varchar 值“XY-21”转换为数据类型 int 时转换失败
【发布时间】:2014-08-12 13:49:08
【问题描述】:

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

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

【问题讨论】:

  • 问题说从VARCHAR 转换为INT 但代码说从INT 转换为VARCHARNew_Master表中MCCL列的数据类型是什么?
  • @MCL = NULL,你在任何地方设置它吗?或者调用 sproc 时会给出什么值?
  • @VladimirOselsky,它是 varchar。
  • @NickyvV 我没有设置为空

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


【解决方案1】:

问题来自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

【讨论】:

    猜你喜欢
    • 2011-12-01
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多