转换varchar值' 781015020002'溢出了一列int

时间:2018-06-18 09:34:05

标签: sql-server

 UPDATE CaTbItemRequest 
     SET vcReqStatus='complete' ,
         vcItemCode='781015020002'
     WHERE inItemRequestNo=2000003 
     and vcDelFlag='false' and vcItemNatureType='Services' 

vcItemCode = varchar(50)

错误MSG

  

Msg 248,Level 16,State 1,Procedure ExtendCode,Line 12   varchar值的转换' 781015020002'溢出了一个int列。   声明已经终止。

2 个答案:

答案 0 :(得分:2)

这里的错误很明显;问题是您的值'781015020002',其值大于2 ^ 31-1,并且,作为一个非常安全的猜测,您的列vcItemCode是数据类型int。您不能在数据类型int的列中存储大于2 ^ 31-1的值。

您需要使用较低的值,或将列vcItemCode的数据类型更改为bigint

编辑:OP已更新其帖子,以建议列vcItemCode的数据类型为varchar(50)。因此,如果查询与OP所做的一样简单,则不会发生此错误。作为一个非常简单的例子:

USE Sandbox;
GO
CREATE TABLE test (vcItemCode varchar(50));
GO
INSERT INTO test
VALUES ('1');
GO

UPDATE test
SET vcItemCode = '781015020002';
GO

DROP TABLE test;

请注意,不会发生错误,因为值'781015020002'没有理由隐式转换为int。因此,我们目前没有足够的信息来回答这个问题。

答案 1 :(得分:1)

列vcItemCode是一个int,可以容纳最大值2,147,483,647。当您尝试使用大于该值的列更新列时,隐式转换会导致错误。

另一个原因可能是您尝试更新的表格上的触发器。

我能想到的第三个原因是CaTbItemRequest是一个视图,它将itemcode显示为varchar(50),但基础列是一个int。