我有一个我继承的 Sql Server 2008 数据库。许多应用程序和 SSIS 包都使用该数据库。不久前,数据库的范围发生了变化,并添加了许多新表。因此,很多表名(甚至数据库名本身)不再有意义,导致架构非常混乱。
我可以立即重命名表并更改应用程序和进程以使用新名称,但同时它会导致的混乱和停机时间是不可接受的。
有没有一种方法可以为表添加一个备用名称(如永久别名),我可以使用它来引用新表名或旧表名,直到我的所有重构完成?
我有一个我继承的 Sql Server 2008 数据库。许多应用程序和 SSIS 包都使用该数据库。不久前,数据库的范围发生了变化,并添加了许多新表。因此,很多表名(甚至数据库名本身)不再有意义,导致架构非常混乱。
我可以立即重命名表并更改应用程序和进程以使用新名称,但同时它会导致的混乱和停机时间是不可接受的。
有没有一种方法可以为表添加一个备用名称(如永久别名),我可以使用它来引用新表名或旧表名,直到我的所有重构完成?
首先创建一个同义词。
CREATE SYNONYM dbo.SensibleName FOR dbo.CrazyName;
现在在您的代码库中找到所有对的引用CrazyName
,并将它们更新为引用SensibleName
。一旦你相信你已经找到了它们,你最终可以运行:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN TRANSACTION;
DROP SYNONYM dbo.SensibleName;
EXEC sp_rename N'dbo.CrazyName', N'SensibleName', N'OBJECT';
COMMIT TRANSACTION;
如果您需要使列名更合理,则必须使用视图来实现,因为同义词仅涵盖数据库级对象的子集。
您可以重命名它,sp_rename
然后添加同义词:
CREATE SYNONYM OldTableName FOR NewTableName