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 函数 (P-Z)

 

ROWID 函数 [Miscellaneous]

返回一个无符号 64 位值,它唯一地标识表内的一行。

语法
ROWID( correlation-name )
参数
  • correlation-name   查询中使用的表的相关名。相关名应引用基表、临时表、全局临时表或代理表(仅在基础代理服务器支持类似函数时允许)。ROWID 函数的参数不应引用视图、派生表、公用表表达式或过程。

返回值

UNSIGNED BIGINT

注释

返回对应于给定相关名的表中的行标识符。

此函数返回的值在进行不同查询时不一定会保持不变,因为在数据库上执行的各种操作可能会导致表的行标识符发生变化。具体地讲,REORGANIZE TABLE 语句可能会导致行标识符发生变化。此外,还可能在删除行后重用了行标识符。因此,用户应避免在普通情况下使用 ROWID 函数,而应改用按主键值检索。建议仅在进行诊断时使用 ROWID。

尽管此函数的结果为 UNSIGNED BIGINT 类型,但对此值进行的大部分算术运算的结果并无特殊意义。例如,请不要期望将行标识符加一即可得到下一行的行标识符。另外,只有等式和 IN 谓语涉及 ROWID 的使用时,才可以对它们进行优化。必要时,涉及 ROWID 的谓语(如 ROWID( T ) = literal)可能会转换为 64 位 UNSIGNED INTEGER 值。如果转换无法执行,会发生数据异常。如果 literal 的值是无效的行标识符,则比较谓语的计算结果为 FALSE。

ROWID 函数不能在表或列中的 CHECK 约束内使用,也不能在计算列的 COMPUTE 表达式中使用。

另请参见
标准和兼容性
  • SQL/2003   服务商扩充。

示例

以下语句返回 Employee 中 id 等于 105 的行的行标识符:

SELECT ROWID( Employees ) FROM Employees WHERE Employees.EmployeeID = 105;

以下语句返回 Employees 表中行上锁的列表以及这些行的内容:

SELECT * 
  FROM sa_locks() S JOIN Employees WITH( NOLOCK ) 
     ON ROWID( Employees ) = S.row_identifier 
  WHERE S.table_name = 'Employees';