视图创建索引的问题,报错
CREATE VIEW vFiles WITH SCHEMABINDING
AS
SELECT 2 AS SourceTypeId, FileId
FROM dbo.ExcelFile
UNION
SELECT 1 AS SourceTypeId, FileId
FROM dbo.TextFile
GO
CREATE UNIQUE CLUSTERED INDEX ix_vFiles_FileId
ON dbo.vFiles
(
FileId
)
GO
Server: Msg 1936, Level 16, State 1, Line 1
Cannot index the view 'MyData.dbo.vFiles '. It contains one or more disallowed constructs.
------解决方案--------------------应该是有重复值
------解决方案--------------------视图合集必须要有唯一值那可以建索引
------解决方案--------------------视图索引创建要求:
视图中的 SELECT 语句不能包含下列 Transact-SQL 语法元素:
选择列表不能使用 * 或 table_name.* 语法指定列。必须显式给出列名。
不能在多个视图列中指定用作简单表达式的表的列名。如果对列的所有(或只有一个例外)引用是复杂表达式的一部分或是函数的一个参数,则可多次引用该列。例如,下列选择列表是非法的:
SELECT ColumnA, ColumnB, ColumnA
下列选择列表是合法的:
SELECT ColumnA, AVG(ColumnA), ColumnA + Column B AS AddColAColB
SELECT SUM(ColumnA), ColumnA % ColumnB AS ModuloColAColB
派生表。
行集函数。
UNION 运算符。
子查询。
外联接或自联接。
TOP 子句。
ORDER BY 子句。
DISTINCT 关键字。
COUNT(*)(允许 COUNT_BIG(*)。)
AVG、MAX、MIN、STDEV、STDEVP、VAR 或 VARP 聚合函数。如果在引用索引视图的查询中指定 AVG、MAX、MIN、STDEV、STDEVP、VAR 或 VARP,如果视图选择列表包含以下替换函数,则优化器会经常计算需要的结果。