Inix SELECT 语句与其子句的详解.doc_第1页
Inix SELECT 语句与其子句的详解.doc_第2页
Inix SELECT 语句与其子句的详解.doc_第3页
Inix SELECT 语句与其子句的详解.doc_第4页
Inix SELECT 语句与其子句的详解.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SELECT 语句与其子句的详解闲来没事做,整理了一下SELECT语句的一点用法,不过这是SQL SERVER 2000 下的,整体的语法和informix 的SQL语法差不多,仅供参考,对于初学SQL语句的新手来说还是有帮助的,嘿嘿 其实我就是新手,以后还请各位大侠多多执教! SELECT从数据库中检索行,并允许从一个或多个表中选择一个或多个行或列。虽然 SELECT 语句的完整语法较复杂,但是其主要的子句可归纳如下: SELECT select_list INTO new_table FROM table_source WHERE search_condition GROUP BY group_by_expression HAVING search_condition ORDER BY order_expression ASC | DESC 可以在查询之间使用 UNION 运算符,以将查询的结果组合成单个结果集。语法SELECT statement := ORDER BY order_by_expression | column_position ASC | DESC ,.n COMPUTE AVG | COUNT | MAX | MIN | SUM ( expression ) ,.n BY expression ,.n FOR BROWSE | XML RAW | AUTO | EXPLICIT , XMLDATA , ELEMENTS , BINARY base64 OPTION ( ,.n ) := | ( ) UNION ALL query specification | ( ) .n := SELECT ALL | DISTINCT TOP integer | TOP integer PERCENT WITH TIES INTO new_table FROM ,.n WHERE GROUP BY ALL group_by_expression ,.n WITH CUBE | ROLLUP HAVING 由于 SELECT 语句的复杂性,下面按子句说明详细的语法元素和参数: SELECT 子句指定由查询返回的列。语法SELECT ALL | DISTINCT TOP n PERCENT WITH TIES := * | table_name | view_name | table_alias .* | column_name | expression | IDENTITYCOL | ROWGUIDCOL AS column_alias | column_alias = expression ,.n 参数ALL指定在结果集中可以显示重复行。ALL 是默认设置。DISTINCT指定在结果集中只能显示唯一行。为了 DISTINCT 关键字的用途,空值被认为相等。TOP n PERCENT指定只从查询结果集中输出前 n 行。n 是介于 0 和 4294967295 之间的整数。如果还指定了 PERCENT,则只从结果集中输出前百分之 n 行。当指定时带 PERCENT 时,n 必须是介于 0 和 100 之间的整数。如果查询包含 ORDER BY 子句,将输出由 ORDER BY 子句排序的前 n 行(或前百分之 n 行)。如果查询没有 ORDER BY 子句,行的顺序将任意。WITH TIES指定从基本结果集中返回附加的行,这些行包含与出现在 TOP n (PERCENT) 行最后的 ORDER BY 列中的值相同的值。如果指定了 ORDER BY 子句,则只能指定 TOP .WITH TIES。为结果集选择的列。选择列表是以逗号分隔的一系列表达式。 * 指定在 FROM 子句内返回所有表和视图内的所有列。列按 FROM 子句所指定的由表或视图返回,并按它们在表或视图中的顺序返回。table_name | view_name | table_alias.* 将 * 的作用域限制为指定的表或视图。column_name 是要返回的列名。限定 column_name 以避免二义性引用,当 FROM 子句中的两个表内有包含重复名的列时会出现这种情况。例如,Northwind 数据库中的 Customers 和 Orders 表内都有名为 ColumnID 的列。如果在查询中联接这两个表,可以在选择列表中将客户 ID 指定为 Customers.CustomerID。expression 是列名、常量、函数以及由运算符连接的列名、常量和函数的任意组合,或者是子查询。 IDENTITYCOL 返回标识列。有关更多信息,请参见 IDENTITY(属性)、ALTER TABLE 和 CREATE TABLE。 如果 FROM 子句中的多个表内有包含 IDENTITY 属性的列,则必须用特定的表名(如 T1.IDENTITYCOL)限定 IDENTITYCOL。 ROWGUIDCOL 返回行全局唯一标识列。 如果在 FROM 子句中有多个表具有 ROWGUIDCOL 属性,则必须用特定的表名(如 T1.ROWGUIDCOL)限定 ROWGUIDCOL。 column_alias 是查询结果集内替换列名的可选名。例如,可以为名为 quantity 的列指定别名,如Quantity或Quantity to Date或Qty。 别名还可用于为表达式结果指定名称,例如: USE NorthwindSELECT AVG(UnitPrice) AS Average PriceFROM Order Detailscolumn_alias 可用于 ORDER BY 子句。然而,不能用于 WHERE、GROUP BY 或 HAVING 子句。如果查询表达式是 DECLARE CURSOR 语句的一部分,则 column_alias 不能用在 FOR UPDATE 子句中。 INTO 子句创建新表并将结果行从查询插入新表中。用户若要执行带 INTO 子句的 SELECT 语句,必须在目的数据库内具有 CREATE TABLE 权限。SELECT.INTO 不能与 COMPUTE 子句一起使用。有关更多信息,请参见事务和显式事务。 通过在 WHERE 子句中包含 FALSE 条件,可以使用 SELECT.INTO 创建没有数据的相同表定义(不同表名)。语法 INTO new_table 参数new_table根据选择列表中的列和 WHERE 子句选择的行,指定要创建的新表名。new_table 的格式通过对选择列表中的表达式进行取值来确定。new_table 中的列按选择列表指定的顺序创建。new_table 中的每列有与选择列表中的相应表达式相同的名称、数据类型和值。当选择列表中包含计算列时,新表中的相应列不是计算列。新列中的值是在执行 SELECT.INTO 时计算出的。在此次发布的 SQL Server 版本中,select into/bulkcopy 数据库选项对是否可以使用 SELECT INTO 创建永久表没有影响。对包括 SELECT INTO 在内的某些大容量操作的记录量,取决于对数据库有效的恢复模式。有关更多信息,请参见使用恢复模型。在以前发布的版本中,如果设置了 select into/bulk copy,则可用 SELECT INTO 创建永久表。select into/bulk copy 用于向后兼容,但在以后的版本中可能不支持该选项。有关更多信息,请参考恢复模式和向后兼容性主题以及 ALTER DATABASE 主题。 FROM 子句指定从其中检索行的表。需要 FROM 子句,除非选择列表只包含常量、变量和算术表达式(没有列名)。有关更多信息,请参见 FROM。语法 FROM ,.n := table_name AS table_alias WITH ( ,.n ) | view_name AS table_alias | rowset_function AS table_alias | OPENXML | derived_table AS table_alias ( column_alias ,.n ) | := ON | CROSS JOIN | := INNER | LEFT | RIGHT | FULL OUTER JOIN参数指定用于 SELECT 语句的表、视图、派生表和联接表。 table_name AS table_alias 指定表名和可选别名。view_name AS table_alias 指定名称、视图和可选别名。rowset_function AS table_alias 是行集函数名和可选别名。有关行集函数列表的更多信息,请参见行集函数。OPENXML 在 XML 文档上提供行集视图。有关更多信息,请参见 OPENXML。WITH ( ,.n ) 指定一个或更多表提示。有关表提示的更多信息,请参见 FROM。derived_table AS table_alias 是嵌套 SELECT 语句,可从指定的数据库和表中检索行。 column_alias 替换结果集内列名的可选别名。 是两个或更多表的积的结果集。例如:SELECT *FROM tab1 LEFT OUTER JOIN tab2 ON tab1.c3 = tab2.c3 RIGHT OUTER JOIN tab3 LEFT OUTER JOIN tab4 ON tab3.c1 = tab4.c1 ON tab2.c3 = tab4.c3对于多个 CROSS 联接,请使用圆括号来更改联接的自然顺序。指定联接操作的类型。 INNER 指定返回所有相匹配的行对。废弃两个表中不匹配的行。如果未指定联接类型,则这是默认设置。LEFT OUTER 指定除所有由内联接返回的行外,所有来自左表的不符合指定条件的行也包含在结果集内。来自左表的输出列设置为 NULL。RIGHT OUTER 指定除所有由内联接返回的行外,所有来自右表的不符合指定条件的行也包含在结果集内。来自右表的输出列设置为 NULL。 FULL OUTER 如果来自左表或右表的某行与选择准则不匹配,则指定在结果集内包含该行,并且将与另一个表对应的输出列设置为 NULL。除此之外,结果集中还包含通常由内联接返回的所有行。 指定联接提示或执行算法。如果指定了 ,也必须明确指定 INNER、LEFT、RIGHT 或 FULL。有关联接提示的更多信息,请参见 FROM。JOIN 表示联接所指定的表或视图。 ON 指定联接所基于的条件。此条件可指定任何谓词,但通常使用列和比较运算符。例如:SELECT ProductID, Suppliers.SupplierID FROM Suppliers JOIN Products ON (Suppliers.SupplierID = Products.SupplierID)当条件指定列时,列不必有相同的名称或相同的数据类型。但是如果数据类型不同,则它们必须是兼容或可由 Microsoft? SQL Server? 进行隐性转换的类型。如果数据类型不能隐式转换,则条件必须使用 CAST 函数显式转换数据类型。有关搜索条件和谓词的更多信息,请参见搜索条件。CROSS JOIN指定两个表的矢量积。返回同样的行,就像要联接的表只列于 FROM 子句中,并且未指定 WHERE 子句。例如,这两个查询返回的结果集都由 T1 和 T2 中所有行的完全联接组成:SELECT * FROM T1, T2SELECT * FROM T1 CROSS JOIN T2 WHERE 子句指定用于限制返回的行的搜索条件。语法 WHERE | := column_name * = | = * column_name 参数通过使用谓词限制结果集内返回的行。对搜索条件中可以包含的谓词数量没有限制。有关搜索条件和谓词的更多信息,请参见搜索条件。使用不标准的产品专用语法和 WHERE 子句指定外联接。*= 运算符用于指定左向外联接,=* 运算符用于指定右向外联接。下例指定一个左向外联接,并在结果集内包含 Tab1 中不满足指定条件的行:SELECT T, Tab2.idFROM Tab1, Tab2WHERE Tab1.id *=Tab2.id说明 这种语法具有潜在的二义性解释并且不标准,因此不提倡使用这种语法进行外联接。而应在 FROM 子句中指定联接。可以通过在 FROM 子句中使用联接运算符,或通过在 WHERE 子句中使用不标准的 *= 和 =* 运算符来指定外联接。不能在同一语句中同时使用这两种方法。 GROUP BY 子句指定用来放置输出行的组,并且如果 SELECT 子句 中包含聚合函数,则计算每组的汇总值。指定 GROUP BY 时,选择列表中任一非聚合表达式内的所有列都应包含在 GROUP BY 列表中,或者 GROUP BY 表达式必须与选择列表表达式完全匹配。说明 如果未指定 ORDER BY 子句,则使用 GROUP BY 子句不按任何特定的顺序返回组。建议始终使用 ORDER BY 子句指定具体的数据顺序。语法 GROUP BY ALL group_by_expression ,.n WITH CUBE | ROLLUP 参数ALL包含所有组和结果集,甚至包含那些任何行都不满足 WHERE 子句指定的搜索条件的组和结果集。如果指定了 ALL,将对组中不满足搜索条件的汇总列返回空值。不能用 CUBE 或 ROLLUP 运算符指定 ALL。 如果访问远程表的查询中有 WHERE 子句,则不支持 GROUP BY ALL 操作。group_by_expression是对其执行分组的表达式。group_by_expression 也称为分组列。group_by expression 可以是列或引用列的非聚合表达式。在选择列表内定义的列的别名不能用于指定分组列。说明 text、ntext 和 image 类型的列不能用于 group_by_expression。对于不包含 CUBE 或 ROLLUP 的 GROUP BY 子句,group_by_expression 的项数受查询所涉及的 GROUP BY 列的大小、聚合列和聚合值的限制。该限制从 8,060 字节的限制开始,对保存中间查询结果所需的中间级工作表有 8,060 字节的限制。如果指定了 CUBE 或 ROLLUP,则最多只能有 10 个分组表达式。CUBE指定在结果集内不仅包含由 GROUP BY 提供的正常行,还包含汇总行。在结果集内返回每个可能的组和子组组合的 GROUP BY汇总行。GROUP BY 汇总行在结果中显示为 NULL,但可用来表示所有值。使用 GROUPING 函数确定结果集内的空值是否是 GROUP BY 汇总值。结果集内的汇总行数取决于 GROUP BY 子句内包含的列数。GROUP BY 子句中的每个操作数(列)绑定在分组 NULL 下,并且分组适用于所有其它操作数(列)。由于 CUBE 返回每个可能的组和子组组合,因此不论指定分组列时所使用的是什么顺序,行数都相同。ROLLUP指定在结果集内不仅包含由 GROUP BY 提供的正常行,还包含汇总行。按层次结构顺序,从组内的最低级别到最高级别汇总组。组的层次结构取决于指定分组列时所使用的顺序。更改分组列的顺序会影响在结果集内生成的行数。重要 使用 CUBE 或 ROLLUP 时,不支持区分聚合,如 AVG(DISTINCT column_name)、COUNT(DISTINCT column_name) 和 SUM(DISTINCT column_name)。如果使用这类聚合,SQL Server 将返回错误信息并取消查询。 HAVING 子句指定组或聚合的搜索条件。HAVING 通常与 GROUP BY 子句一起使用。如果不使用 GROUP BY 子句,HAVING 的行为与 WHERE 子句一样。语法HAVING 参数指定组或聚合应满足的搜索条件。当 HAVING 与 GROUP BY ALL 一起使用时,HAVING 子句替代 ALL。有关更多信息,请参见搜索条件。在 HAVING 子句中不能使用 text、image 和 ntext 数据类型。说明 在 SELECT 语句中使用 HAVING 子句不影响 CUBE 运算符分组结果集和返回汇总聚合行的方式。 UNION 运算符将两个或更多查询的结果组合为单个结果集,该结果集包含联合查询中的所有查询的全部行。这与使用联接组合两个表中的列不同。使用 UNION 组合两个查询的结果集的两个基本规则是: 所有查询中的列数和列的顺序必须相同。数据类型必须兼容。 语法 | ( ) UNION ALL query specification | ( ) UNION ALL query specification | ( ) .n 参数 | ( )是查询规范或查询表达式,用以返回与另一个查询规范或查询表达式所返回的数据组合的数据。作为 UNION 运算一部分的列定义可以不相同,但它们必须通过隐性转换实现兼容。下表说明数据类型与相应 (ith) 列的选项的比较规则。ith 列的数据类型 结果表中 ith 列的数据类型 非数据兼容类型(数据转换不由 Microsoft? SQL Server? 隐性处理)。 SQL Server 返回的错误。 长度为 L1 和 L2 的固定长度 char。 长度与 L1 和 L2 中较长的那个相等的固定长度 char。 长度为 L1 和 L2 的固定长度 binary。 长度与 L1 和 L2 中较长的那个相等的固定长度 binary。 任一列或两列都是可变长度 char。 长度与为 ith 列指定的最大长度相等的可变长度 char。 任一列或两列都是可变长度 binary。 长度与为 ith 列指定的最大长度相等的可变长度 binary。 两列都是数字数据类型(如 smallint、int、float、money)。 与两列的最大精度相等的数据类型。例如,如果表 A 的 ith 列是 int 类型,表 B 的 ith 列是 float 类型,则 ith 列在结果表中的数据类型是 float,因为 float 比 int 更精确。 两列的描述都指定 NOT NULL。 指定 NOT NULL。 UNION指定组合多个结果集并将其作为单个结果集返回。ALL在结果中包含所有的行,包括重复行。如果没有指定,则删除重复行。 ORDER BY 子句指定结果集的排序。除非同时指定了 TOP,否则 ORDER BY 子句在视图、内嵌函数、派生表和子查询中无效。语法 ORDER BY order_by_expression ASC | DESC ,.n 参数order_by_expression指定要排序的列。可以将排序列指定为列名或列的别名(可由表名或视图名限定)和表达式,或者指定为代表选择列表内的名称、别名或表达式的位置的负整数。 可指定多个排序列。ORDER BY 子句中的排序列序列定义排序结果集的结构。ORDER BY 子句可包括未出现在此选择列表中的项目。然而,如果指定 SELECT DISTINCT,或者如果 SELECT 语句包含 UNION 运算符,则排序列必定出现在选择列表中。此外,当 SELECT 语句包含 UNION 运算符时,列名或列的别名必须是在第一选择列表内指定的列名或列的别名。说明 在 ORDER BY 子句中不能使用 ntext、text 和 image 列。ASC指定按递增顺序,从最低值到最高值对指定列中的值进行排序。DESC指定按递减顺序,从最高值到最低值对指定列中的值进行排序。空值被视为最低的可能值。对 ORDER BY 子句中的项目数没有限制。然而,对于排序操作所需的中间级工作表的大小有 8,060 字节的限制。这限制了在 ORDER BY 子句中指定的列的合计大小。COMPUTE 子句生成合计作为附加的汇总列出现在结果集的最后。当与 BY 一起使用时,COMPUTE 子句在结果集内生成控制中断和分类汇总。可在同一查询内指定 COMPUTE BY 和 COMPUTE。语法 COMPUTE AVG | COUNT | MAX | MIN | STDEV | STDEVP | VAR | VARP | SUM ( expression ) ,.n BY expression ,.n 参数AVG | COUNT | MAX | MIN | STDEV | STDEVP | VAR | VARP | SUM指定要执行的聚合。下面是 COMPUTE 子句使用的行聚合函数:行聚合函数 结果 AVG 数字表达式中所有值的平均值 COUNT 选定的行数 MAX 表达式中的最高值 MIN 表达式中的最低值 STDEV 表达式中所有值的统计标准偏差 STDEVP 表达式中所有值的填充统计标准偏差 SUM 数字表达式中所有值的和 VAR 表达式中所有值的统计方差 VARP 表达式中所有值的填充统计方差 没有等同于 COUNT(*) 的函数。若要查找由 GROUP BY 和 COUNT(*) 生成的汇总信息,请使用不带 BY 的 COMPUTE 子句。这些函数忽略空值。如果是用 COPPUT 子句指定的行聚合函数,则不允许它们使用 DISTINCT 关键字。当添加或平均整数数据时,即使列的数据类型为 smallint 或 tinyint,SQL Server 也将结果视为 int 值。有关返回添加数据或平均数据的类型的更多信息,请参见 SUM 和 AVG。说明 为减少在 ODBC 和 DB-Library 程序中溢出错误的可能性,请将平均或汇总结果的所有变量声明均作为数据类型 int。( expression )表达式,如对其执行计算的列名。expression 必须出现在选择列表中,并且必须将其指定为与选择列表中的某个表达式完全一样。在 expression 内不能使用在选择列表中指定的列的别名。说明 在 COMPUTE 或 COMPUTE BY 子句中,不能指定 ntext、text 和 image 数据类型。BY expression在结果集内生成控制中断和分类汇总。expression 是 order_by_expression 在相关 ORDER BY 子句中的精确复本。一般情况下,这是列名或列的别名。可指定多个表达式。在 BY 后列出多个表达式可将一个组分成子组并在每个分组级别上应用聚合函数。如果使用 COMPUTE BY,则必须也使用 ORDER BY 子句。表达式必须与在 QRDER BY 后列出的子句相同或是其子集,并且必须按相同的序列。例如,如果 ORDER BY 子句是:ORDER BY a, b, c则 COMPUTE子句可以是下面的任意一个(或全部):COMPUTE BY a, b, cCOMPUTE BY a, bCOMPUTE BY a说明 在带 COMPUTE 子句的 SELECT 语句中,选择列表中的列顺序替代 COMPUTE 子句中的聚合函数顺序。ODBC 和 DB-library 程序员必须知道这种顺序要求,以将聚合函数结果放在正确的位置。由于包含 COMPUTE 的语句生成表并且这些表的汇总结果不存储在数据库中,因此在 SELECT INTO 语句中不能使用 COMPUTE。因而,任何由 COMPUTE 生成的计算结果不出现在用 SELECT INTO 语句创建的新表内。当 SELECT 语句是 DECLARE CURSOR 语句的一部分时,不能使用 COMPUTE 子句。FOR 子句FOR 子句用于指定 BROWSE 或 XML 选项(BROWSE 和 XML 是不相关的选项)。语法 FOR BROWSE | XML RAW | AUTO | EXPLICIT , XMLDATA , ELEMENTS , BINARY BASE64 参数BROWSE指定当查看 DB-Library 浏览模式游标中的数据时允许更新。如果表包含时间戳列(用 timestamp 数据类型定义的列),表有唯一索引且 FOR BROWSE 选项在 SELECT 语句的最后发送到 SQL Server,则可以在应用程序中浏览该表。有关更多信息,请参见浏览模式。说明 在含有 FOR BROWSE 选项的 SELECT 语句中无法使用 HOLDLOCK。FOR BROWSE 选项不能出现在用 UNION 运算符联接的 SELECT 语句中。XML指定查询结果将作为 XML 文档返回。必须指定下列 XML 模式之一:RAW、AUTO、EXPLICIT。有关 XML 数据和 SQL Server 的更多信息,请参见使用 FOR XML 检索 XML 文档。RAW获得查询结果并将结果集内的各行转换为 XML 元素,用一般标识符 作为元素标记。有关更多信息,请参见使用 RAW 模式。AUTO以简单的嵌套 XML 树返回查询结果。在 FROM 子句内,每个在 SELECT 子句中至少有一列被列出的表都表示为一个 XML 元素。SELECT 子句中列出的列映射到适当的元素特性。有关更多信息,请参见使用 AUTO 模式。EXPLICIT指定显式定义所得到的 XML 树的形状。使用此种模式,要求以一种特定的方式编写查询,以便显式指定有关期望的嵌套的附加信息。有关更多信息,请参见使用 EXPLICIT 模式。XMLDATA返回架构,但不将根元素添加到结果中。如果指定了 XMLDATA,它将被追加到文档上。ELEMENTS指定列作为子元素返回。否则,列将映射到 XML 特性。BINARY BASE64指定查询返回二进制 base64 编码格式的二进制数据。使用 RAW 和 EXPLICIT 模式检索二进制数据时,必须指定该选项。这是 AUTO 模式中的默认值。 OPTION 子句指定应在整个查询中使用所指定的查询提示。每个查询提示只能指定一次,但允许指定多个查询提示。用该语句只可能指定一个 OPTION 子句。查询提示影响语句中的所有运算符。如果主查询中涉及 UNION,则只有涉及 UNION 运算符的最后一个查询可以有 OPTION 子句。如果一个或多个查询提示导致查询优化器不生成有效计划,则产生 8622 号错误。注意 查询优化器通常为查询选择最佳执行计划,因此建议有经验的数据库管理员将 、 和 仅作为最后的手段。语法 OPTION ( ,.n := HASH | ORDER GROUP | CONCAT | HASH | MERGE UNION | LOOP | MERGE | HASH JOIN | FAST number_rows | FORCE ORDER | MAXDOP number | ROBUST PLAN | KEEP PLAN| KEEPFIXED PLAN | EXPAND VIEWS 参数 HASH | ORDER GROUP指定在 GROUP BY、DISTINCT 或 COMPUTE 查询子句中所描述的聚合应使用哈希操作或排列。 MERGE | HASH | CONCAT UNION指定由合并、哈希或串联 UNION 集合执行所有 UNION 运算。如果指定了不止一个 UNION 提示,查询优化器就会从这些指定的提示中选择开销最少的策略。 LOOP | MERGE | HASH JOIN指定在整个查询中所有的联接操作由循环联接、合并联接或哈希联接来完成。如果指定了多个联接提示,则优化器从允许的联接策略中选择最便宜的联接策略。 如果在同一个查询中,还为一对特定的表指定了联接提示,则虽然仍须遵守查询提示,但该联接提示将优先联接这两个表。因此,为这对表指定的联接提示可能只限制选择查询提示中允许的联接方法。有关详细信息,请参见提示。FAST number_rows指定对查询进行优化,以便快速检索第一个 number_rows(非负整数)。在第一个 number_rows 返回后,查询继续进行并生成完整的结果集。FORCE ORDER指定在查询优化过程中保持由查询语法表示的联接顺序。MAXDOP number只对指定了 sp_configure 的 max degree of parallelism 配置选项的查询替代该选项。当使用 MAXDOP 查询提示时,所有和 max degree of parallelism 配置选项一起使用的语义规则均适用。有关更多信息,请参见 max degree of parallelism 选项。ROBUST PLAN强制查询优化器以性能为代价,使用对最大可能的行大小有效的计划。处理查询时,中间级表和运算符可能需要存储和处理比输入行宽的行。在有些情况下,行可能很宽,以致某个运算符无法处理行。如果发生这种情况,SQL Server 将在查询执行过程中生成错误。通过使用 ROBUST PLAN,可以指示查询优化器不考虑可能会遇到该问题的查询计划。KEEP PLAN强制查询优化器对查询放宽估计的重新编译阈值。估计的重新编译阈值是一个点,基于该点当对表的索引列更改(更新、删除或插入)达到估计的数字时自动重新编译查询。指定 KEEP PLAN 将确保当表有多个更新时不会频繁地对查询进行重新编译。KEEPFIXED PLAN强制查询优化器不因统计中的更改或索引列(更新、删除或插入)而重新编译查询。指定 KEEPFIXED PLAN 将确保仅当更改基础表的架构或在那些表上执行 sp_recompile 时才重新编译查询。EXPAND VIEWS指定展开索引视图,而且查询优化器不将任何索引视图看作是查询中任何部分的替代。(当视图名称由查询文本中的视图定义替换时,视图将展开。)实际上,该查询提示不允许在查询计划中直接使用索引视图和直接在索引视图上使用索引。只有在查询的 SELECT 部分中直接引用视图,而且指定 WITH (NOEXPAND) 或 WITH(NOEXPAND、INDEX( index_val ,.n )),才会展开索引视图。有关查询提示 WITH (NOEXPAND) 的更多信息,请参见 FROM。只有语句的 S

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论