例如,索引视图选择列表不能包含表达式 AVG(SomeColumn)。如果视图选择列表包含表达式 SUM(SomeColumn) 和 COUNT_BIG(SomeColumn),则 SQL Server 可为引用视图并指定 AVG(SomeColumn) 的查询计算平均数。引用可为空的表达式的 SUM 函数。 全文谓词 CONTAINS 或 FREETEXT。 COMPUTE 或 COMPUTE BY 子句。 如果没有指定 GROUP BY,则视图选择列表不能包含聚合表达式。 如果指定了 GROUP BY,则视图选择列表必须包含 COUNT_BIG(*) 表达式,并且,视图定义不能指定 HAVING、CUBE 或 ROLLUP。 通过一个既可以取值为 float 值也可以使用 float 表达式求值的表达式而生成的列不能作为索引视图或表的索引的键。 CREATE INDEX 语句的要求 在视图上创建的第一个索引必须是唯一聚集索引。在创建唯一聚集索引后,可创建其它非聚集索引。视图上的索引命名规则与表上的索引命名规则相同。唯一区别是表名由视图名替换。有关更多信息,请参见 CREATE INDEX。除了一般的 CREATE INDEX 要求外,CREATE INDEX 语句还必须满足下列要求: 执行 CREATE INDEX 语句的用户必须是视图的所有者。 当执行 CREATE INDEX 语句时,下列 SET 选项必须设置为 ON: ANSI_NULLS ANSI_PADDING ANSI_WARNINGS ARITHABORT CONCAT_NULL_YIELDS_NULL QUOTED_IDENTIFIERS 必须将选项 NUMERIC_ROUNDABORT 选项设置为 OFF。 视图不能包含 text、ntext 或 image 列,即使在 CREATE INDEX 语句中没有引用它们。 如果视图定义中的 SELECT 语句指定了一个 GROUP BY 子句,则唯一聚集索引的键只能引用在 GROUP BY 子句中指定的列。
---创建索引视图需要注意的几点 1. 创建索引视图的时候需要指定表所属的架构 --错误写法 create view v_f with schemabinding as select a.a,a.b,b.a,b.b from a join b on a.id=b.id go---正确写法: create view v_f with schemabinding as select * from dbo.a join dbo.b on a.id=b.id go 2.在创建索引视图的select语句时,不使用*,必须指定具体的列名 --错误写法 create view v_f with schemabinding as select a.a,a.b,b.a,b.b from dbo.a join dbo.b on a.id=b.id go---正确写法 create view v_f with schemabinding as select a.a,a.b,b.a,b.b from dbo.a join dbo.b on a.id=b.id go3.在创建索引视图的select 语句中,不能存在重复的列名,这个不举例了4. 只能为索引视图创建唯一聚集索引 --正确的写法 create unique clustered index ix_uniquetb on v_tb go--错误的写法 create clustered index ix_uniquetb on v_tb go本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/fredrickhu/archive/2010/01/12/5183068.aspx
---创建索引视图需要注意的几点 1. 创建索引视图的时候需要指定表所属的架构 --错误写法 create view v_f with schemabinding as select a.a,a.b,b.a,b.b from a join b on a.id=b.id go---正确写法: create view v_f with schemabinding as select * from dbo.a join dbo.b on a.id=b.id go 2.在创建索引视图的select语句时,不使用*,必须指定具体的列名 --错误写法 create view v_f with schemabinding as select a.a,a.b,b.a,b.b from dbo.a join dbo.b on a.id=b.id go---正确写法 create view v_f with schemabinding as select a.a,a.b,b.a,b.b from dbo.a join dbo.b on a.id=b.id go3.在创建索引视图的select 语句中,不能存在重复的列名,这个不举例了4. 只能为索引视图创建唯一聚集索引 --正确的写法 create unique clustered index ix_uniquetb on v_tb go--错误的写法 create clustered index ix_uniquetb on v_tb go本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/fredrickhu/archive/2010/01/12/5183068.aspx
为执行所有 CREATE TABLE 语句以创建视图引用的表,ANSI_NULLS 选项必须设置为 ON。
视图不能引用任何其它视图,只能引用基表。
视图引用的所有基表必须与视图位于同一个数据库中,并且所有者也与视图相同。
必须使用 SCHEMABINDING 选项创建视图。SCHEMABINDING 将视图绑定到基础基表的架构。
必须已使用 SCHEMABINDING 选项创建了视图中引用的用户定义的函数。
表和用户定义的函数必须由 2 部分的名称引用。不允许使用 1 部分、3 部分和 4 部分的名称。
视图中的表达式所引用的所有函数必须是确定性的。OBJECTPROPERTY 函数的 IsDeterministic 属性报告用户定义的函数是否是确定性的。有关更多信息,请参见确定性函数和非确定性函数。
视图中的 SELECT 语句不能包含下列 Transact-SQL 语法元素:
选择列表不能使用 * 或 table_name.* 语法指定列。必须显式给出列名。
不能在多个视图列中指定用作简单表达式的表的列名。如果对列的所有(或只有一个例外)引用是复杂表达式的一部分或是函数的一个参数,则可多次引用该列。例如,下列选择列表是非法的:
SELECT ColumnA, ColumnB, ColumnA下列选择列表是合法的:SELECT ColumnA, AVG(ColumnA), ColumnA + Column B AS AddColAColBSELECT 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,如果视图选择列表包含以下替换函数,则优化器会经常计算需要的结果。 复杂聚合函数 替代简单聚合函数
AVG(X)
SUM(X), COUNT_BIG(X)
STDEV(X)
SUM(X), COUNT_BIG(X), SUM(X**2)
STDEVP(X)
SUM(X), COUNT_BIG(X), SUM(X**2)
VAR(X)
SUM(X), COUNT_BIG(X), SUM(X**2)
VARP(X)
SUM(X), COUNT_BIG(X), SUM(X**2)
例如,索引视图选择列表不能包含表达式 AVG(SomeColumn)。如果视图选择列表包含表达式 SUM(SomeColumn) 和 COUNT_BIG(SomeColumn),则 SQL Server 可为引用视图并指定 AVG(SomeColumn) 的查询计算平均数。引用可为空的表达式的 SUM 函数。
全文谓词 CONTAINS 或 FREETEXT。
COMPUTE 或 COMPUTE BY 子句。
如果没有指定 GROUP BY,则视图选择列表不能包含聚合表达式。
如果指定了 GROUP BY,则视图选择列表必须包含 COUNT_BIG(*) 表达式,并且,视图定义不能指定 HAVING、CUBE 或 ROLLUP。
通过一个既可以取值为 float 值也可以使用 float 表达式求值的表达式而生成的列不能作为索引视图或表的索引的键。
CREATE INDEX 语句的要求
在视图上创建的第一个索引必须是唯一聚集索引。在创建唯一聚集索引后,可创建其它非聚集索引。视图上的索引命名规则与表上的索引命名规则相同。唯一区别是表名由视图名替换。有关更多信息,请参见 CREATE INDEX。除了一般的 CREATE INDEX 要求外,CREATE INDEX 语句还必须满足下列要求: 执行 CREATE INDEX 语句的用户必须是视图的所有者。
当执行 CREATE INDEX 语句时,下列 SET 选项必须设置为 ON:
ANSI_NULLS
ANSI_PADDING
ANSI_WARNINGS
ARITHABORT
CONCAT_NULL_YIELDS_NULL
QUOTED_IDENTIFIERS
必须将选项 NUMERIC_ROUNDABORT 选项设置为 OFF。
视图不能包含 text、ntext 或 image 列,即使在 CREATE INDEX 语句中没有引用它们。
如果视图定义中的 SELECT 语句指定了一个 GROUP BY 子句,则唯一聚集索引的键只能引用在 GROUP BY 子句中指定的列。
1. 创建索引视图的时候需要指定表所属的架构
--错误写法
create view v_f with schemabinding
as
select
a.a,a.b,b.a,b.b
from
a join b
on
a.id=b.id
go---正确写法:
create view v_f with schemabinding
as
select
*
from
dbo.a join dbo.b
on
a.id=b.id
go
2.在创建索引视图的select语句时,不使用*,必须指定具体的列名
--错误写法
create view v_f with schemabinding
as
select
a.a,a.b,b.a,b.b
from
dbo.a join dbo.b
on
a.id=b.id
go---正确写法
create view v_f with schemabinding
as
select
a.a,a.b,b.a,b.b
from
dbo.a join dbo.b
on
a.id=b.id
go3.在创建索引视图的select 语句中,不能存在重复的列名,这个不举例了4. 只能为索引视图创建唯一聚集索引
--正确的写法
create unique clustered index ix_uniquetb on v_tb
go--错误的写法
create clustered index ix_uniquetb on v_tb
go本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/fredrickhu/archive/2010/01/12/5183068.aspx
1. 创建索引视图的时候需要指定表所属的架构
--错误写法
create view v_f with schemabinding
as
select
a.a,a.b,b.a,b.b
from
a join b
on
a.id=b.id
go---正确写法:
create view v_f with schemabinding
as
select
*
from
dbo.a join dbo.b
on
a.id=b.id
go
2.在创建索引视图的select语句时,不使用*,必须指定具体的列名
--错误写法
create view v_f with schemabinding
as
select
a.a,a.b,b.a,b.b
from
dbo.a join dbo.b
on
a.id=b.id
go---正确写法
create view v_f with schemabinding
as
select
a.a,a.b,b.a,b.b
from
dbo.a join dbo.b
on
a.id=b.id
go3.在创建索引视图的select 语句中,不能存在重复的列名,这个不举例了4. 只能为索引视图创建唯一聚集索引
--正确的写法
create unique clustered index ix_uniquetb on v_tb
go--错误的写法
create clustered index ix_uniquetb on v_tb
go本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/fredrickhu/archive/2010/01/12/5183068.aspx