Gui*_*rez 6 sql-server metadata
SQL Server 中 object_id 的唯一性级别是什么?我的意思是,这个值是不是每个数据库、每个实例、每个服务器都是唯一的,...此外,当我在另一个服务器或实例中恢复数据库时会发生什么?如果我从脚本而不是备份创建数据库,那么 object_id 会发生什么?
Seb*_*ine 16
object_id 列对于每个数据库都是唯一的。不同数据库中的两个对象可以具有相同的 object_id,但是同一数据库中的不同对象始终具有不同的 object_id 值。
每次删除和创建对象时,都会自动分配一个新的 object_id 值,并且无法影响选择的值。但是,如果您使用该ALTER语句更改对象,则 object_id 保持不变。
由于无法影响为 object_id 选择的值,因此也无法以保留 object_id 的方式编写数据库脚本,因此如果您使用 t-sql 脚本重新创建数据库,则之前的数据库之间没有相关性object_id 值和新值。
另一方面,数据库备份将实际数据页一对一复制,因此 object_id 值将保持不变。
一般来说,在生产系统中远离 object_id 值是个好主意。您不能使用它来检测变化或不变的情况。它唯一应该用于过滤或连接系统表和 DMV。您还可以使用它来有条件地删除这样的对象:IF(OBJECT_ID('dbo.objectname') IS NOT NULL) DROP...对于其他任何事情,您都应该将该值视为禁区。