如何隐藏/禁用表而不删除它们以检查冗余?

Tim*_*ter 12 database-design sql-server t-sql sql-server-2012

我必须维护和扩展一个旧的遗留系统,其中包含不再使用的 web 服务方法和数据库表。由于我不完全确定这些表是否真的是多余的,因此我害怕删除它们。

有没有其他方法可以在不删除它们的情况下实现相同的效果(不能再使用表格)?我的想法是将它们Deleted从当前默认的dbo.

IF NOT EXISTS (SELECT * FROM sys.schemas WHERE name = 'Deleted')
BEGIN
   EXEC('CREATE SCHEMA Deleted')
END

ALTER SCHEMA Deleted TRANSFER dbo.TableName;
Run Code Online (Sandbox Code Playgroud)

有没有其他选择或者模式方法有什么缺点?

Cha*_*tox 12

其他几个选项是只重命名表,或者如果它们有聚集索引,您可以禁用聚集索引。

  • @TimSchmelter 禁用 CI 的一个缺点是要再次启用它,您需要重建索引。另一种选择是拒绝公共角色对表的权限,尽管数据库所有者或系统管理员仍会看到它们,也可能通过所有权链接看到它们。 (5认同)

Kin*_*hah 7

有没有其他方法可以在不删除它们的情况下实现相同的(不能再使用表)?

架构更改是一项非常快速的操作 - 只需要更改元数据。我最初的想法来自Aaron Bertrand 的博客 - Schema Switch-A-Roo

您可以按照我在此处回答的步骤进行操作

显然还有其他方法,例如sp_rename N'old table'、N'new table'或只是拒绝对该表的权限。


Phi*_* W. 6

从[可能] 使用它的角色/组/帐户中删除表的权限

如果有什么东西爆炸了,把它们[迅速]放回去。

提示:使用脚本进行这些更改将是一个非常非常好的主意。