-1

根据 Sql Server,任何计算列只有在确定性时才能被索引。即,考虑列 a、b 和 c 是 INT 数据类型和 c = a+b。现在列 C 可以被索引,但是 ** 当列 a 或 b 拥有最大的 Integer 值时,它会抛出算术错误,有什么解决方案吗?

谢谢。

4

1 回答 1

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.

如果您希望计算始终有效,请更改计算,以使至少其中一列被强制为 a bigint(因此数学和结果类型c也是bigint):

    c as CAST(a as bigint)+b
于 2013-04-12T07:21:51.497 回答