0
假設有一個表,如:指數不能被創建,因爲列的,是不精確的
create table #data
(
ID int identity(1, 1),
Value float,
VCluster as (ID % 5),
VType as (cast(case when Value > 1 then 1 when Value < -1 then -1 else 0 end as int))
)
我需要建立在其計算列兩個指標如下:
create index #ix_data_1 on #data (VCluster)
create index #ix_data_2 on #data (VType)
第一個創建好了,但是當我試圖創建第二個我收到錯誤消息:「無法創建表‘#DATA’索引或統計信息‘#ix_data_2’,因爲計算列'VType'是不精確的,不會持續...「
我查詢系統的看法吧:
select c.name, c.system_type_id, t.name as type_name
from tempdb.sys.columns c
join tempdb.sys.types t on t.system_type_id = c.system_type_id
where c.object_id = object_id('tempdb..#data')
order by c.column_id
,並得到以下結果:
name system_type_id type_name
---------- -------------- ----------
ID 56 int
Value 62 float
VCluster 56 int
VType 56 int
所以,VType
列的類型爲int,但似乎在某種程度上這是「不太INT 」。 我知道我可以創建列persisted
並創建索引,但有沒有辦法避免它,並使列VType
「100%int」?
@Damien_The_Unbeliever:你爲什麼不把這寫成答案?這是正確的。 – OzrenTkalcecKrznaric