2013-04-12 58 views
-1

根據Sql Server,任何計算列只有在確定性時才能被索引。 即,考慮列a,b和c是INT數據類型並且c = a + b。現在列C可以索引,但是當列a或b保持最大的整數值時,它會拋出算術錯誤,是否有解決方案?2個最大整數的索引計算列

謝謝。

+1

這看起來可能自己用5分鐘的努力來回答問題的類型。 –

+1

或者,鑑於我的評論是2分鐘的時間,並且我在打開查詢窗口之前發佈了它並寫下了我的答案,可能5分鐘是一個很高的估計。 –

+0

我試過並得到這個算術溢出錯誤。但有興趣知道任何解決方案。可能是問題的最後一行是錯誤的。 – lollol

回答

2
create table TA (
    ID int not null primary key, 
    a int not null, 
    b int not null, 
    c as a+b 
) 
go 
create index IX_TA_c on TA (c) 
go 
insert into TA(ID,a,b) values (1,1,2147483647) 

插入得到:

Msg 8115, Level 16, State 2, Line 1 
Arithmetic overflow error converting expression to data type int. 
The statement has been terminated. 

如果你想計算總是工作,使列中的至少一個被強制爲bigint(等等數學和更改計算的c產生的類型都是bigint也):

c as CAST(a as bigint)+b