为什么 SQL Server Management Studio 在更改脚本中生成两个重命名?

Pro*_*ofK 2 sql-server ssms

我刚刚使用 SSMS 2008 Express 创建了一个更改脚本,用于重命名表中的两列。但是,更改脚本包含四个使用中间临时名称的重命名。为什么是这样?

EXECUTE sp_rename N'dbo.PerformanceCategories.WeekToDateFormula', N'Tmp_WeekToDateFormulaActual_4', 'COLUMN' 
GO
EXECUTE sp_rename N'dbo.PerformanceCategories.MonthToDateFormula', N'Tmp_MonthToDateFormulaActual_5', 'COLUMN' 
GO
EXECUTE sp_rename N'dbo.PerformanceCategories.Tmp_WeekToDateFormulaActual_4', N'WeekToDateFormulaActual', 'COLUMN' 
GO
EXECUTE sp_rename N'dbo.PerformanceCategories.Tmp_MonthToDateFormulaActual_5', N'MonthToDateFormulaActual', 'COLUMN' 
Run Code Online (Sandbox Code Playgroud)

Bra*_*adC 5

我认为您的问题没有很好的答案,除了自动脚本生成工具有时不得不牺牲效率以确保它们不会在奇怪的极端情况下引起问题的事实。

这里没有内幕消息,但也许他们正在考虑以下情况:

首席执行官参加了一个鼓舞人心的研讨会,并提出了重新定义公司组织方式的疯狂想法,包括每个“级别”的名称:

Company  >>  Section
Division >>  Office
Office   >>  Branch
Run Code Online (Sandbox Code Playgroud)

如果您只是像这样直接生成 sp_rename 脚本:

sp_rename 'org.Company',  'Section', 'COLUMN' 
sp_rename 'org.Division', 'Office',  'COLUMN' 
sp_rename 'org.Office',   'Branch',  'COLUMN' 
Run Code Online (Sandbox Code Playgroud)

第二个会失败,因为名为“office”的字段已经存在。在这种情况下,您可以通过对它们进行排序来解决该问题,以便在第二次重命名之前进行第三次重命名,但是如果您的重命名实际上是:

Address1  >>  Address2
Address2  >>  Address3
Address3  >>  Address1
Run Code Online (Sandbox Code Playgroud)

那么就没有任何顺序可以让您无误地执行重命名。您必须先分配唯一的临时名称。