【发布时间】:2016-08-18 04:13:38
【问题描述】:
我一直在探索%%physloc%% 伪列作为行标识符的实际用途。不幸的是,我在%%physloc%% 上找不到官方文档。我需要知道这个值是否可以改变。
我做了一些测试,它看起来很静态。即使我创建数据库的备份并在不同的服务器上恢复,每一行的%%physloc%% 保持不变。
谁能解释这是否可靠和/或提供文档链接?非常感谢。
【问题讨论】:
-
鉴于它指的是物理位置,它可能根本不是很可靠。考虑如果数据库被重新分区、优化等会发生什么......记录的物理位置将被移动并且您的标识符将不再有效。
-
这就是为什么 %%physloc%% 没有记录(官方)!
-
正如其他人指出的那样,它不能指望,但这里可能对您来说是一个更好的问题。你想用它做什么?是否有另一种方式来做你想做的事?它是加扰格式的 page_id、file_id 和 slot_id 的组合。 sqlskills.com/blogs/paul/…
-
@Matt 当然还有更好的方法。问题是,有时我们会继承设计不佳的无主键表的系统。
-
我没有说得更好:),我说的是不同的。我想我的观点是看到它是无主键的表,您需要/想要的关键是它是临时的动态操作还是与外部源的永久关系?因为有可供您选择的选项。更改数据跟踪和更改与更改跟踪,row_number(),仍然不如只是在表上添加一个标识列,但它可以工作....听起来你可能已经探索了其中的一些,只是在寻找可以做一个工作,这也是我最初来到 %%physloc%% 的原因。
标签: sql-server