首页 > 解决方案 > 为什么 Sp_lock 不显示 RID 类型?

问题描述

当我在我的数据库上执行 sp_lock 时,我看到一些带有 RID 的行,它定义了哪个记录被锁定: 在此处输入图像描述

如果我在另一台服务器上执行 sp_lock 并与另一个用户一起执行另一个数据库,我不会得到 RID: 在此处输入图像描述

为什么?这可能是用户的授权问题吗?

标签: sql-server

解决方案


您的数据库中的表是一个堆。

https://docs.microsoft.com/en-us/sql/relational-databases/indexes/heaps-tables-without-clustered-indexes

“当表存储为堆时,通过引用由文件号、数据页号和页面上的槽组成的行标识符 (RID) 来标识各个行。行 ID 是一种小而有效的结构。”

您的 dml 语句需要锁定相应的行,并且每一行都由 RID 标识。

在另一台服务器上,有另一个表和另一个用户,该表是一个集群表。每行由聚集索引的“值”标识。您的 dml 语句需要锁定相应的行,并且每一行都由 KEY(索引值)标识。


推荐阅读