科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道教你快速的掌握如何在计算列上创建索引

教你快速的掌握如何在计算列上创建索引

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

computed_column_expression 必须是确定性的。如果表达式对一组给定的输入总是返回同样的结果,则该表达式是确定性的。

作者:赛迪网 xiaoqiao 来源:天新网 2008年3月27日

关键字: Mssql SQL SQL Server 数据库

  • 评论
  • 分享微博
  • 分享邮件

只要满足下列要求,则可在计算列上定义索引:

computed_column_expression 必须是确定性的。如果表达式对一组给定的输入总是返回同样的结果,则该表达式是确定性的。在下列情况中,computed_column_expression 是确定性的:

◆表达式引用的所有函数都是确定和精确的。这包括用户定义的函数和内置函数。

◆表达式引用的所有列都来自包含计算列的表。

◆没有列引用从多行拉数据。例如,聚合函数(如 SUM 或 AVG)依靠来自多行的数据,这使得 computed_column_expression 不确定。

COLUMNPROPERTY 函数的 IsDeterministic 属性报告 computed_column_expression 是否确定。

计算列表达式在下列情况中精确:

◆非 float 数据类型表达式。

◆其定义中不使用 float 数据类型。例如,在下列语句中,列 y 为 int 型并且确定,但不精确:

CREATE TABLE t2 (a int, b int, c int, x float, 
y AS CASE x 
WHEN 0 THEN a 
WHEN 1 THEN b 
ELSE c 
END)

COLUMNPROPERTY 函数的 IsPrecise 属性报告 computed_column_expression 是否精确。

说明 任何 float 型表达式都被认为是不精确的,不能作为索引键;float 型表达式可以用在索引视图中,但不能作为键。对于计算列同样如此。如果函数、表达式、用户定义的函数或视图定义中包含任何 float 表达式(包括逻辑表达式(比较)),则被认为是不确定的。

执行 CREATE TABLE 语句时,必须将 ANSI_NULL 连接级选项设置为 ON。OBJECTPROPERTY 函数通过 IsAnsiNullsOn 属性报告此选项是否已打开。

为计算列定义的 computed_column_expression 不能取值为 text、ntext 或 image 数据类型。

对于创建索引的连接和所有尝试使用 INSERT、UPDATE 或 DELETE 语句更改索引值的连接,必须使六个 SET 选项设置为 ON,一个选项设置为 OFF。如果不具有上述选项设置的连接执行了任何 SELECT 语句,优化器将忽略计算列上的索引。

下列选项必须设置为 ON:

◆ANSI_NULLS

◆ANSI_PADDING

◆ANSI_WARNINGS

◆ARITHABORT

◆CONCAT_NULL_YIELDS_NULL

◆QUOTED_IDENTIFIER

除上述 ON 设置外,NUMERIC_ROUNDABORT 选项必须设置为 OFF。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章