Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.
返回 UNSIGNED BIGINT 值,它唯一地标识表内的一行。
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( T ) = literal
ROWID 函数不能在表或列中的 CHECK 约束内使用,也不能在计算列的 COMPUTE 表达式中使用。
SQL/2008 服务商扩充。
以下语句返回 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';