2013-04-10 73 views
3

我不得不當我執行SELECT語句問題的錯誤:SELECT * FROM表給出了關於算術溢出

SELECT * 
FROM Table1 
ORDER BY column1, column2 

我得到算術溢出錯誤。我發現哪一列是問題,即somecolumn這是數字(10,0),但在一些行中包含多於10位數字,並且不問我怎麼發生,因爲我不知道:)

我只是刪除了足夠的數字,使列有最多10位數,並解決了該錯誤的錯誤,但問題是,有大約100個這樣的行。

問題是:什麼會導致這樣的問題,以及如何編寫正確的SQL語句來選擇這些行?

在我看來,問題最終可能是某種方式來截斷列中的值。這只是假設:可能列首先是數字(20,0),並且包含10或11位數字的值,但是有人認爲此列必須更改爲數字(10,0),然後出現問題。這只是一些假設。

+0

是'萬一somecolumn'計算列? – Tomalak 2013-04-10 13:46:50

+0

不,經典數字列,不含公式,不會持久。 – veljasije 2013-04-10 13:55:52

+0

該列是如何定義的,該列中的值是多少?我想嘗試在這裏創建同一個問題的表。 – Alex 2013-04-10 14:15:00

回答

2

爲什麼不只是改變這一列?
或者你也可以嘗試將其轉換這樣的:

SELECT CONVERT(bigint,(somecolumn)) 
FROM Table1 
ORDER BY column1, column2 
+0

我不能只是改變列,因爲我沒有權限去做。轉換不起作用,同樣的錯誤。 – veljasije 2013-04-11 12:32:25

+0

對ALTER或表沒有權限?如果只有這個表,我認爲你可以使SELECT * INTO ...新的臨時表,並與它一起工作 – 2013-04-11 12:50:18

+0

每當我選擇這個列,我得到錯誤,所以這種解決方案將無法正常工作。順便說一下,爲數百萬行創建臨時表可能會降低性能 – veljasije 2013-04-11 12:58:00