我刚刚使用 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'
答案1
我认为您的问题没有好的答案,除了自动脚本生成工具有时必须牺牲效率以确保它们不会在奇怪的极端情况下引起问题这一事实之外。
这里没有内部信息,但也许他们正在考虑类似以下的情况:
这位首席执行官参加了一次鼓舞人心的研讨会,并提出了一个疯狂的想法,重新定义公司的组织方式,包括每个“层级”的名称:
Company >> Section
Division >> Office
Office >> Branch
如果您只是生成直接的 sp_rename 脚本,如下所示:
sp_rename 'org.Company', 'Section', 'COLUMN'
sp_rename 'org.Division', 'Office', 'COLUMN'
sp_rename 'org.Office', 'Branch', 'COLUMN'
第二个会失败,因为名为“office”的字段已经存在。在这种情况下,您可以通过对它们进行排序来解决这个问题,即第三次重命名在第二次之前,但是如果您的重命名实际上是:
Address1 >> Address2
Address2 >> Address3
Address3 >> Address1
那么就没有顺序可以让你无错误地执行重命名。你必须先分配唯一的临时名称。