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