我有一张表,其中包括
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值上添加一个Index,以便索引有效地使用<, >, <=, >= and BETWEEN
运算符。那么,我如何创建一个计算列,将该值转换为float,然后将index添加到此计算列中?这可能吗?
答案 0 :(得分: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);