执行一个存储过程的时候,报错“Arithmetic overflow error converting expression to data type int”。出错的地方不复杂,是把一张表中的执行结果,插入到某个表变量中。根本原因,是表中定义的accountId是bigint类型,而表变量中定义的是int类型。所以,即便你插入的值是在int范围之内的,SQL Server还是会报错。
这不是我随手写的一个存储过程,而是已经check-in的代码。很可能是存储过程已经check-in了,其他人又对表做了修改。
把这个小问题记录下来,是提醒自己,不要想当然地认为int改为bigint,只是数值范围扩大了,并不会对系统造成多大的影响。保险起见,还是要捋一遍存储过程里面是不是有类似的溢出风险。
DECLARE @OUAccounts TABLE (i_billable_acct_id bigint NOT NULL) INSERT INTO @OUAccounts (i_billable_acct_id) SELECT bap.i_billable_acct_id AS 'i_billable_acct_id' FROM billable_acct_property (NOLOCK) AS bap WHERE i_property_type_id = 1 AND nvc_property_value = 'OperatingUnitType'