• 索引视图条件


    索引视图是有很多要求的
    create view dbo.test_view   
    with schemabinding  -- 架构绑定   
    as  
    select * from test   
    go  

    在对视图创建聚集索引之前,该视图必须符合下列要求:

    • 当执行 CREATE VIEW 语句时,ANSI_NULLS 和 QUOTED_IDENTIFIER 选项必须设置为 ON。OBJECTPROPERTY 函数通过 ExecIsAnsiNullsOnExecIsQuotedIdentOn 属性为视图报告此信息。

    • 要执行所有 CREATE TABLE 语句以创建视图引用的表,ANSI_NULLS 选项必须设置为 ON。

    • 视图不能引用任何其他视图,只能引用基表。

    • 视图引用的所有基表必须与视图位于同一数据库中,并且所有者也与视图相同。

    • 必须使用 SCHEMABINDING 选项创建视图。架构绑定将视图绑定到基础基表的架构。

    • 必须已使用 SCHEMABINDING 选项创建了视图引用的用户定义函数。

    • 表和用户定义函数必须由视图中由两部分组成的名称引用。不允许由一部分、三部分和四部分组成的名称引用它们。

    • 视图中的表达式引用的所有函数必须是确定的。OBJECTPROPERTY 函数的 IsDeterministic 属性报告用户定义函数是否具有确定性。有关详细信息,请参阅确定性函数和不确定性函数。

      注意:
      引用 SQL Server 2008 中的索引视图中的 datetimesmalldatetime 字符串文字时,建议使用确定性日期格式样式将文字显式转换为所需日期类型。有关确定性日期格式样式列表,请参阅 CAST 和 CONVERT (Transact-SQL)。将字符串隐式转换为 datetimesmalldatetime 所涉及的表达式被视为具有不确定性,除非兼容级别设置为 80 或更低。这是因为结果取决于服务器会话的 LANGUAGE 和 DATEFORMAT 设置。例如,表达式 CONVERT (datetime, '30 listopad 1996', 113) 的结果取决于 LANGUAGE 设置,因为字符串 listopad 在不同语言中表示不同的月份。同样,在 DATEADD(mm,3,'2000-12-01') 表达式中,SQL Server 基于 DATEFORMAT 设置解释 '2000-12-01'字符串。
      非 Unicode 字符数据在排序规则间的隐式转换也被视为具有不确定性,除非兼容级别设置为 80 或更低。

      在 90 兼容模式下,不允许对包含这些表达式的视图创建索引。但是,包含已升级数据库中的这些表达式的现有视图是可维护的。如果使用索引视图(其中包含从字符串到日期的隐式转换),请确保 LANGUAGE 和 DATEFORMAT 的设置在数据库和应用程序中保持一致,以避免可能的索引视图损坏。

    • 如果视图定义使用聚合函数,SELECT 列表还必须包括 COUNT_BIG (*)。

    • 用户定义函数的数据访问属性必须为 NO SQL,外部访问属性必须是 NO。

    • 公共语言运行时 (CLR) 功能可以出现在视图的选择列表中,但不能作为聚集索引键定义的一部分。CLR 函数不能出现在视图的 WHERE 子句中或视图中的 JOIN 运算的 ON 子句中。

    • 在视图定义中使用的 CLR 函数和 CLR 用户定义类型方法必须具有下表所示的属性设置。

       

      属性 注意

      DETERMINISTIC = TRUE

      必须显式声明为 Microsoft .NET Framework 方法的属性

      PRECISE = TRUE

      必须显式声明为 .NET Framework 方法的属性。

      DATA ACCESS = NO SQL

      通过将 DataAccess 属性设置为 DataAccessKind.None 并将 SystemDataAccess 属性设置为 SystemDataAccessKind.None 来确定。

      EXTERNAL ACCESS = NO

      对于 CLR 例程,该属性的默认设置为 NO。

      有关如何设置 CLR 例程方法的属性的详细信息,请参阅 Custom Attributes for CLR Routines。

      注意:
      我们建议 CLR 例程方法的属性设置不要与该方法的功能相悖。如果相悖,可能会导致数据损坏。
    • 视图中的 SELECT 语句不能包含下列 Transact-SQL 语法元素:

      • 指定列的 * 或 table_name.* 语法。必须明确给出列名。

      • 不能在多个视图列中指定用作简单表达式的表列名。如果对列的所有(或除了一个引用之外的所有)引用是复杂表达式的一部分或是函数的一个参数,则可以多次引用该列。例如,下面的 SELECT 列表无效:

         复制代码
        SELECT ColumnA, ColumnB, ColumnA
        下面的 SELECT 列表有效:

         复制代码
        SELECT SUM(ColumnA) AS SumColA, ColumnA % ColumnB AS ModuloColAColB, COUNT_BIG(*) AS cBig FROM dbo.T1 GROUP BY ModuloColAColB
      • 在 GROUP BY 子句中使用的列的表达式或基于聚合结果的表达式。

      • 派生表。

      • 公用表表达式 (CTE)。

      • 行集函数。

      • UNION、EXCEPT 或 INTERSECT 运算符。

      • 子查询。

      • 外联接或自联接。

      • TOP 子句。

      • ORDER BY 子句。

      • DISTINCT 关键字。

      • COUNT(*)(允许 COUNT_BIG(*)。)

      • AVG、MAX、MIN、STDEV、STDEVP、VAR 或 VARP 聚合函数。如果在引用索引视图的查询中指定了 AVG(expression),则当视图 SELECT 列表中包含 SUM(expression) 和 COUNT_BIG(expression) 时,优化器可经常计算所需结果。例如,索引视图 SELECT 列表不能包含表达式 AVG(column1)。如果视图 SELECT 列表包含表达式 SUM(column1) 和 COUNT_BIG(column1),则 SQL Server 可以计算引用视图并指定 AVG(column1) 的查询的平均数。

      • 引用可为空表达式的 SUM 函数。

      • 包括排名或聚合开窗函数的 OVER 子句。

      • CLR 用户定义聚合函数。

      • 全文谓词 CONTAINS 或 FREETEXT。

      • COMPUTE 或 COMPUTE BY 子句。

      • CROSS APPLY 或 OUTER APPLY 运算符。

      • PIVOT 或 UNPIVOT 运算符。

      • 表提示(仅应用于 90 或更高的兼容级别)。

      • 联接提示。

      • 对 Xquery 表达式的直接引用。可以接受间接引用,例如位于绑定到架构的、用户定义的函数内部的 Xquery 表达式。

    • 如果指定了 GROUP BY,则视图选择列表必须包含 COUNT_BIG(*) 表达式,且视图定义不能指定 HAVING、ROLLUP、CUBE 或 GROUPING SETS。
  • 相关阅读:
    Django and Djangorestframework
    安装socketio出现module 'importlib._bootstrap' has no attribute 'SourceFileLoader' 错误
    pycharm 里运行 django 工程 You must either define the environment variable DJANGO_SETTINGS_MODULE 错误
    linux 安装python3
    iOS 10.3下解决Fiddler代理抓包ssl证书信任问题
    Android 7.0 fiddler代理抓不到https请求的解决办法
    python base64 decode incorrect padding错误解决方法
    Fiddler做代理服务器时添加X-Forwarder-For转发真实客户端ip
    python安装pbkdf2 遇到错误TypeError: __call__() takes exactly 2 arguments (1 given)
    soapUI通过groovy脚本设置超时时间
  • 原文地址:https://www.cnblogs.com/toowang/p/2524387.html
Copyright © 2020-2023  润新知