【发布时间】:2012-05-16 01:49:51
【问题描述】:
在 nvarchar 类型的计算列上创建索引会引发以下错误:
无法在表“MyTable”上创建索引或统计信息“MyIndex”,因为 计算列 'MyColumn' 不精确且不持久。 考虑从索引或统计键或标记中删除列 计算列保持不变。
不精确列是什么意思?
更新。定义如下:
alter table dbo.MyTable
add [MyColumn] as dbo.MyDeterministicClrFunction(MyOtherColumn)
go
create index MyIndex on dbo.MyTable(MyColumn)
go
更新2。 MyDeterministicClrFunction 定义如下:
[SqlFunction(IsDeterministic = true)]
public static SqlString MyDeterministicClrFunction(SqlString input)
{
return input;
}
【问题讨论】:
-
您尝试使用什么公式计算列值?
-
是
nvarchar(xx)还是nvarchar(max)? -
MyOtherColumn其他列是nvarchar(50)。 -
好的,所以第 1 步是将
PERSISTED添加到您的ALTER TABLE语句中 -
我不想保留那一栏,我想让它准确:)
标签: sql sql-server tsql sql-server-2008-r2