Answers:
我认为该方法取决于应用程序是实时的还是仍在测试中。
对于表,最安全的方法是使用新名称创建同义词。这样,您可以一次更改一个应用程序(甚至一次更改一个引用),而不必一次更改所有应用程序。您不必删除同义词并重命名表,直到您确信所有更改均已就位。
CREATE SYNONYM dbo.NewName FOR dbo.OldName;
-- change app to point to dbo.NewName;
-- once all of your changes have been tested:
BEGIN TRANSACTION;
DROP SYNONYM dbo.NewName;
EXEC sp_rename N'dbo.OldName', N'NewName', N'OBJECT';
COMMIT TRANSACTION;
对于列,这有点棘手。您可以创建指向视图的同义词,但并非所有视图都必须可更新,具体取决于基表。作为一个简单的例子:
CREATE VIEW dbo.vNewName
AS
SELECT Column1, NewColumnName = OldColumnName
FROM dbo.OldName;
CREATE SYNONYM dbo.NewName FOR dbo.vNewName;
然后像上面一样,当您更改了对列的所有引用和新表名后,只需:
BEGIN TRANSACTION;
DROP SYNONYM dbo.NewName;
DROP VIEW dbo.vNewName;
EXEC sp_rename N'dbo.OldName', N'NewName', N'OBJECT';
EXEC sp_rename N'dbo.NewName.OldColumnName', N'NewColumnName', N'COLUMN';
COMMIT TRANSACTION;
如果该应用程序尚未上线并且仍在测试中,则只需重新命名各列并通过应用程序代码/过程等在全局搜索和替换(或使用SSDT,RedGate等进行智能重构)后修复中断的内容。
如果应用程序是在线的,则需要小心一些。