2013-07-16 46 views
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」?

+0

@Damien_The_Unbeliever:你爲什麼不把這寫成答案?這是正確的。 – OzrenTkalcecKrznaric

回答

2

這不是計劃使不精確的結果類型 - 這是它的一個float輸入值的依賴。除了您已經排除的解決方案之外,您無能爲力 - 將其標記爲PERSISTED

相關問題