我有一個場景,我需要某個觸發器來觸發表中的所有行。規則或觸發器會導致意外的溢出錯誤
據我所知,最簡單的方法是執行一個愚蠢的更新,定義爲一個完全不會改變數據的更新,然後執行。一個簡單的例子是這樣的一個:
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