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))
)

次のように、計算列に 2 つのインデックスを作成する必要があります。

create index #ix_data_1 on #data (VCluster)
create index #ix_data_2 on #data (VType)

最初のものはうまく作成されますが、2 番目のものを作成しようとすると、次のエラー メッセージが表示されます。 ...」

システム ビューを次のようにクエリしました。

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」にする方法はありますか?

4

1 に答える 1

2

float不正確なのは結果の型ではなく、入力値への依存です。すでに除外した解決策以外にできることは何もありません - それを としてマークしてPERSISTEDください。

于 2013-07-16T12:11:08.110 に答える