Назад | Перейти на главную страницу

Почему SQL Server Management Studio генерирует два переименования в сценарии изменения?

Я только что создал сценарий изменения с помощью 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

Тогда нет порядка, который позволил бы вам выполнить переименование без ошибок. Сначала вам нужно будет присвоить уникальные временные имена.