我在同一个 SQL 实例上有 2 个单独的 SQL 数据库。Database1 在其视图和存储过程中引用 Database2 上的表。一切正常,直到我们不得不创建一个新版本的 Database2 并将当前的 Database2 重命名为 Database3。
DBA 执行了以下操作:
使 Database2 脱机,然后将其重新附加为 Database3。然后从 SQL 中删除了 Database2。
创建了一个新版本的 Database2。
问题:
除非我们将服务器名称添加到任何查询中的 FROM 子句,否则 Database1 中的视图和存储过程仍在引用 Database3 上的表。
Database1 上的以下视图错误地转到 Database3:
select * from Database2.dbo.Projects
Run Code Online (Sandbox Code Playgroud)
为了正确的行为,我们指定服务器名称:
select * from ProductionDB.Database2.dbo.Projects
Run Code Online (Sandbox Code Playgroud)
为什么 Database1 的视图和存储过程仍然引用 Database3(除非我们指定服务器名称)?
是不是因为我们通过重新附加而不是备份和还原来重命名数据库?
Database1 中是否有需要更新的内部引用?
是否有我找不到的隐藏数据库同义词?
sql sql-server 备份数据库-管理交叉