2014-10-30 68 views
1

我有一個表,其中包括,添加計算列,並把指數上

CREATE TABLE [dbo].[ProductsAttributesValues](
    [Id] [int] IDENTITY(1,1) NOT NULL, 
    [ProductId] [int] NOT NULL, 
    [AttributeId] [int] NOT NULL, 
    [Value] [nvarchar](3000) NOT NULL 
) 

此表包括行的巨量。問題是很多時候[Value]列包含float或int值,但有時它也包含文本。現在,我正在考慮在float或int值上添加索引,以便索引將高效地使用<, >, <=, >= and BETWEEN運算符。那麼,我怎樣才能創建一個計算列,將該值轉換爲浮點值,然後將索引添加到此計算列中?這可能嗎?

回答

1

float表達式被認爲是不精確的,不能成爲索引的關鍵;浮點表達式可以在索引視圖中使用,但不能用作鍵。對於計算列也是如此。如果任何函數,表達式或用戶定義函數包含任何浮點表達式,則認爲它們不精確。這包括邏輯的(比較)。

但是,如果列在CREATE TABLE或ALTER TABLE語句中標記爲PERSISTED,則可以在確定性但不精確的表達式定義的計算列上創建索引。取自here

-- This will add your float computed column: 
ALTER TABLE ProductsAttributesValues ADD Value_Float AS 
(
    CASE WHEN ISNUMERIC([Value]) = 1 THEN 
     CONVERT(float, [Value]) 
    ELSE 
     NULL 
    END 
) PERSISTED; 

-- This will create the index: 
CREATE INDEX IX_ProductsAttributesValues_Value_Float 
ON ProductsAttributesValues (Value_Float); 
+0

你能告訴我在[Value]上創建計算列的語法是否爲float,然後爲其添加索引? – user960567 2014-10-30 12:06:29

+0

@ user960567好吧,我已經添加了SQL。 – Donal 2014-10-30 12:23:31

+0

它可變嗎? – user960567 2014-10-30 13:36:14