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列。 声明已经终止。
答案 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。