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

视图创建索引的问题,报错
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,如果视图选择列表包含以下替换函数,则优化器会经常计算需要的结果。