Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 参考 » 使用 SQL » SQL 函数 » SQL 函数 (E-O)

 

NUMBER 函数 [Miscellaneous]

为查询结果中的每个连续行生成从 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;