我有一个场景,我需要某个触发器来触发表中的所有行。规则或触发器会导致意外的溢出错误
据我所知,最简单的方法是执行一个愚蠢的更新,定义为一个完全不会改变数据的更新,然后执行。一个简单的例子是这样的一个:
update PFUNC set CODCOLIGADA = CODCOLIGADA
这一直工作正常,到现在为止,但是,我们插入到这一点我有一个非常奇怪的错误一个新的生产数据库,执行上面的例子:
The conversion of the varchar value '301947' overflowed an INT2 column. Use a larger integer column.
这是毫无意义的,因为如果一个值存储在一个单元格中,它当然应该符合该表模式定义的数据类型。
但是忍受我......让它变得更加怪异,这张表甚至没有连续的字段CODCOLIGADA包含301947.执行select CODCOLIGADA from dbo.PFUNC where CODCOLIGADA = 301947
不会产生任何结果。
如果我这样做,使用引号,我得到与上述相同的数据类型的错误:
select codcoligada from dbo.PFUNC where CODCOLIGADA = '301947'
回报
The conversion of the varchar value '301947' overflowed an INT2 column. Use a larger integer column.
这是版本信息:
Microsoft SQL Server 2008 R2 (SP3) - 10.50.6220.0 (X64) Mar 19 2015 12:32:14 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.3 (Build 9600:)
我的理解是,如果该值(301947)包含在表中,它应该以某种方式被截断,因为它违反了现存的模式。如果它不在那里,更新会中断是没有意义的。
我在这里错过了一些警告或怪癖阴影行为?
UPDATE:详细的用户定义类型
这看起来像一个用户定义的数据类型列。你可以发布这个定义吗? – VKarthik
@VKarthik,我更新了帖子,包括 –
您确定要更正正确的数据库和模式表吗?我们很多人犯了在SSMS中选择了错误的数据库的错误 – scsimon