日期:2014-05-18  浏览次数:20572 次

数据库视图索引问题
 
SELECT a.*, b.*, c.* FROM temp_user a INNER JOIN test_to b ON a.userid = b.author INNER JOIN test_re c ON b.t_id = c.topic_id
go
create unique clustered index iv1 on v_test_sudu (t_id)  



消息 1942,级别 16,状态 1,第 1 行
无法对视图 'Temp_Test.dbo.v_test_sudu' 创建 索引。它包含 text、ntext、image 或 xml 列。

------解决方案--------------------
对视图创建的第一个索引必须是唯一聚集索引。创建唯一聚集索引后,可以创建其他非聚集索引。视图的索引命名约定与表的索引命名约定相同。唯一的区别是表名替换为视图名。有关详细信息,请参阅 CREATE INDEX (Transact-SQL)。

CREATE INDEX 除了符合 CREATE INDEX 的常规要求之外,还必须符合下列要求: 

执行 CREATE INDEX 语句的用户必须是视图所有者。


执行 CREATE INDEX 语句时,下列 SET 选项必须设置为 ON: 


ANSI_NULLS


ANSI_PADDING


ANSI_WARNINGS


CONCAT_NULL_YIELDS_NULL


QUOTED_IDENTIFIER


NUMERIC_ROUNDABORT 选项必须设置为 OFF。这是默认设置。


创建聚集索引或非聚集索引时,IGNORE_DUP_KEY 选项必须设置为 OFF(默认设置)。


即使 CREATE INDEX 语句中未引用 text、ntext 或 image 列,视图中也不能包含这些列。


如果视图定义中的 SELECT 语句指定了一个 GROUP BY 子句,则唯一聚集索引的键只能引用在 GROUP BY 子句中指定的列。


显示为索引键列值的不精确表达式必须是视图基表中的存储列的一个引用。此列可以是常规存储列,也可以是持久化计算列。其他不精确表达式不能作为索引视图的键列的一部分。