Я только что создал сценарий изменения с помощью 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'
Я не думаю, что есть хороший ответ на ваш вопрос, кроме того факта, что автоматическим инструментам генерации скриптов иногда приходится жертвовать эффективностью, чтобы убедиться, что они не вызывают проблем в странных угловых случаях.
Здесь нет внутренней информации, но, возможно, они учитывают что-то вроде следующего сценария:
Генеральный директор отправился на вдохновляющий семинар, и ему пришла в голову безумная идея заново определить, как организована компания, включая то, как называется каждый «уровень»:
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'
Второй вариант не сработает, потому что поле с именем «офис» уже существует. В этом случае вы можете исправить это, упорядочив их так, чтобы третье переименование было раньше второго, но что, если бы ваши переименования были на самом деле:
Address1 >> Address2
Address2 >> Address3
Address3 >> Address1
Тогда нет порядка, который позволил бы вам выполнить переименование без ошибок. Сначала вам нужно будет присвоить уникальные временные имена.