sp;还可以创建用户定义的内联函数,在逻辑上作为参数化视图运行,或者作为在 WHERE 子句
搜索条件或
查询的其他部分中含有参数的视图运行。
提供向后兼容性
视图使您能够在表的架构更改时为表创建向后兼容接口。例如,一个应用
程序可能引用了具有以下架构的非规范化表:
Employee(Name, BirthDate, Salary, Department, BuildingName)
若要避免在数据库中重复存储数据,可以通过将该表拆分为下列两个表来规范化该表:
Employee2(Name, BirthDate, Salary, DeptId)
Department(DeptId, BuildingName)
若要提供仍然可引用 Employee 中数据的向后兼容接口,可以删除旧的 Employee 表并以以下视图中的内容替换它:
自定义数据
视图允许用户以不同方式查看数据,即使在他们同时使用相同的数据时也是如此。这在具有许多不同目的和技术水平的用户共用同一数据库时尤其有用。例如,可创建一个视图以仅检索由客户经理处理的客户数据。该视图可以根据使用它的客户经理的登录 ID 决定检索哪些数据
导出和导入数据
可使用视图将数据导出到其他应用
程序。例如,您可能希望使用 AdventureWorks 数据库中的 Customer 和 SalesOrderHeader 表在 Microsoft Excel 中分析销售数据。为此,可基于 Customer 和 SalesOrderHeader 表创建视图。然后可以使用 bcp 实用工具导出视图定义的数据。如果使用 INSERT 语句可以在某些视图中插入行,那么使用 bcp 实用工具或 BULK INSERT 语句也可将数据文件中的数据导入视图。
跨服务器组合分区数据
Transact-SQL UNION 集合运算符可在视图内使用,将单独表的两个或多个
查询的结果组合到单一的结果集中。这在用户看来是一个单独的表,称为分区视图。例如,如果一个表包含华盛顿的销售数据,另一个表包含加利福尼亚的销售数据,则可以对这两个表使用 UNION 创建一个视图。该视图代表这两个地区的销售数据
四、视图解析
SQL Server 2005
查询处理器对索引视图和非索引视图将区别对待:
索引视图的行以表的格式存储在数据库中[只有创建了索引才分配存储空间]。如果查询优化器决定使用
查询计划的索引视图,则索引视图将按照基表的处理方式进行处理。
只有非索引视图的定义才存储,而不存储视图的行。查询优化器将视图定义中的逻辑纳入执行计划,而该执行计划是它为引用非索引视图的 SQL 语句生成的。
SQL Server 查询优化器用于决定何时使用索引视图的逻辑与用于决定何时对表使用索引的逻辑相似。如果索引视图中的数据包括所有或部分 SQL 语句,而且查询优化器确定视图的某个索引是低成本的访问路径,则不论查询中是否引用了该视图的名称,查询优化器都将选择此索引。
当 SQL 语句引用非索引视图时,分析器和查询优化器将分析 SQL 语句的源和视图的源,然后将它们解析为单个执行计划。没有单独用于 SQL 语句或视图的计划。
与所有索引相同,仅当查询优化器确定在 SQL Server 的查询计划中使用索引视图有益时,SQL Server 才会选择使用视图索引。当满足下列条件时,SQL Server 查询优化器使用索引视图:
当满足下列条件时,SQL Server 查询优化器使用索引视图:
下列会话选项均设置为 ON:
ANSI_NULLS
ANSI_PADDING
ANSI_WARNINGS
ARITHABORT
CONCAT_NULL_YIELDS_NULL
QUOTED_IDENTIFIER
NUMERIC_ROUNDABORT 会话选项设置为 OFF。
查询优化器查找视图索引列与查询中的元素之间的匹配,例如:
&nb