【问题标题】:Indexing Computed Column of 2 largest integers [closed]2个最大整数的索引计算列[关闭]
【发布时间】:2013-04-12 07:14:52
【问题描述】:

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

谢谢。

【问题讨论】:

  • 这似乎是你自己花5分钟就能回答的问题。
  • 或者,鉴于我的评论已有 2 分钟的历史,并且我在打开查询窗口并写下我的答案之前发布了它,也许 5 分钟是一个很高的估计。
  • 我试过并得到这个算术溢出错误。但有兴趣了解任何解决方案。可能是问题的最后一行是错误的。
  • 想要的解决方案是什么?

标签: sql-server indexing calculated-columns


【解决方案1】:
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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    • 2014-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多