为查询结果中的每个连续行生成从 1 开始的编号。NUMBER 函数主要供在选择列表中使用。
由于受到 NUMBER 函数的限制(下面的注释部分中有说明),请改为使用ROW_NUMBER 函数 [Miscellaneous]。ROW_NUMBER 函数提供了相同的功能,却没有 NUMBER 函数的限制。
NUMBER( * )
INT
可以在选择列表中使用 NUMBER(*),以为结果集中的行提供顺序编号。NUMBER(*) 返回每个结果行的 ANSI 行号值。这意味着 NUMBER 函数返回的值可能是正数或负数,具体取决于应用程序在结果集中滚动的方式。对于不敏感游标,NUMBER(*) 的值总是正数,因为整个结果集是在 OPEN 状态下实现的。
此外,行号可能会受某些游标类型更改的影响。对于不敏感游标和滚动游标,该值是固定的。如果存在并发更新,则该值对于动态游标和敏感游标可能会发生变化。
在以下位置使用 NUMBER 函数会生成语法错误:DELETE 语句、WHERE 子句、HAVING 子句、ORDER BY 子句、子查询、涉及集合的查询、任何约束、GROUP BY 子句、DISTINCT 子句、查询表达式(UNION、EXCEPT、INTERSECT)或派生表。
NUMBER(*) 可在视图中使用(受上述限制的约束),但在查询或外部视图中,对应于涉及 NUMBER(*) 的表达式的视图列最多只能被引用一次,而且视图在左外连接或完全外连接中不能以提供 NULL 的表的形式出现。
在嵌入式 SQL 中,当您使用的游标引用包含 NUMBER(*) 函数的查询时,应小心谨慎。具体地讲,当使用相对于游标结尾处的位置(偏移为负的绝对位置)来定位数据库游标时,此函数返回负数。
在 UPDATE 语句的 SET 子句中,可以在赋值符号的右侧使用 NUMBER。例如,SET x = NUMBER(*)
。
从 SELECT 语句中使用 INSERT(请参见INSERT 语句)时,还可以使用 NUMBER 函数生成主键,尽管生成顺序主键的首选机制是使用 AUTOINCREMENT 子句。
有关 AUTOINCREMENT 子句的信息,请参见CREATE TABLE 语句。
SQL/2003 服务商扩充。
以下语句返回按顺序排列的部门列表。
SELECT NUMBER( * ), DepartmentName FROM Departments WHERE DepartmentID > 5 ORDER BY DepartmentName; |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |