创建索引视图所需的步骤对于视图的成功执行至关重要。
|
1. |
针对将在视图中引用的所有现有表,确认 ANSI_NULLS 的设置正确无误。 |
|
2. |
创建任何新表之前,确认对下表所示的当前会话正确设置了 ANSI_NULLS。 |
|
3. |
创建任何新表之前,确认对下表所示的当前会话正确设置了 ANSI_NULLS 和 QUOTED_IDENTIFIER。 |
|
4. |
确认视图定义具有确定性。 |
|
5. |
使用 WITH SCHEMABINDING 选项创建视图。 |
|
6. |
在视图上创建唯一的聚集索引之前,确认会话的 SET 选项的设置正确无误,如下图所示。 |
|
7. |
在视图上创建唯一的聚集索引。 |
|
8. |
可用 OBJECTPROPERTY 函数检查现有表或视图上 ANSI_NULLS 和 QUOTED_IDENTIFIER 的值。 |
如果在执行查询时对当前会话启用了不同的 SET 选项,评估相同的表达式可在 SQL Server 2005 中产生不同的结果。例如,SET 选项 CONCAT_NULL_YIELDS_NULL 被设为 ON 后,表达式 'abc' + NULL 会返回值 NULL。但当 CONCAT_NULL_YIEDS_NULL 被设为 OFF 后,相同的表达式会生成 'abc'。对于当前会话和视图所引用的对象,索引视图需要几个 SET 选项的固定值,以确保正确维护视图并返回一致的结果。
只要存在下列条件,就必须按下表中“必需的值”一列所示的值对当前会话设置 SET 选项:
| • |
创建了索引视图。 | |||||||||||||||||||||||||||||||||||
| • |
在加入索引视图的任何表上执行了任何 INSERT、UPDATE 或 DELETE 操作。 | |||||||||||||||||||||||||||||||||||
| • |
查询优化器用索引视图生成查询计划。
|
ARITHABORT4 选项必需被设为 ON,以便使当前会话创建索引视图,但是在 SQL Server 2005 中,只要 ANSI_WARNINGS 的值为 ON,该选项就会自动被设为 ON,所以不必对其进行设置。如果使用 OLE DB 或 ODBC 服务器连接,只需修改 ARITHABORT 设置的值。必须使用 sp_configure 在服务器级别或使用 SET 命令从应用程序正确设置所有 DB LIB 值。有关 SET 选项的详细信息,参阅 SQL Server 联机丛书中的“使用选项”。
索引视图的定义必须具有确定性。如果选择列表中的所有表达式以及 WHERE 和 GROUP BY 子句都具有确定性,那么视图就具有确定性。具有确定性的表达式总是在通过一组特定的输入值对其进行评估时,返回相同的结果。只有具有确定性的函数才会加入具有确定性的表达式。例如,DATEADD 函数具有确定性,因为对于任何给定的一组参数值,该函数总对它的三个参数返回相同的结果。GETDATE 不具有确定性,因为它总调用相同的参数,而其返回的值在每次执行时都会发生变化。详细信息,参阅面向 SQL Server 2005 的 SQL Server 联机丛书中的“具有和不具有确定性的函数”。
即使某个表达式具有确定性(如果其包含浮点表达式),确切的结果可能依处理器体系结构或微码的版本而定。为了在计算机间迁移数据库时确保 SQL Server 2005 中数据的完整性,这种表达式只能作为索引视图的非键列加入。不含浮点表达式的具有确定性的表达式被认为是精确的。只有永久和/或精确的具有确定性的表达式才可加入键列以及索引视图的 WHERE 或 GROUP BY 子句。永久性表达式是对已保存列的引用,包括一般列和标为 PERSISTED 的计算列。
用 COLUMNPROPERTY 函数和 IsDeterministic 属性确定视图列是否具有确定性。用 COLUMNPROPERTY 函数和 IsPrecise 属性确定带有 SCHEMABINDING 的视图中的具有确定性的列是精确的。如果属性为 TRUE,COLUMNPROPERTY 将返回 1;如为 FALSE,则返回 0;而如果为 NULL,则表示无效输入。例如,在此脚本中
CREATE TABLE T(a int, b real, c as getdate(), d as a+b)
CREATE VIEW VT WITH SCHEMABINDING AS SELECT a, b, c, d FROM dbo.T
SELECT object_id('VT'), COLUMNPROPERTY(object_id('VT'),'b','IsPrecise')
SELECT 对 IsPrecise 返回 0,因为 b 列为实型。可通过 COLUMNPROPERTY 做一些实验,确认 T 的其他列是否具有确定性并是精确的。
| 共9页: 上一页 [1] [2] [3] [4] 5 [6] [7] [8] [9] 下一页 | ||
|