Я пытаюсь перенести данные во время обновления базы данных, и я не понимаю, почему сценарий 1 работает, но сценарий 2 бросает исключение:базы данных - Недопустимое имя столбца
Сценарий 1
- Перенос данных из устаревших Таблица в Нью-Таблица
- работает, если ObsoleteTable и NewTa BLE как существует
- Нет ошибок если ObsoleteTable был удален уже
запросов Сценарий 1:
-- NewTable already created
IF EXISTS(select * from sys.tables where name = 'NewTable')
AND EXISTS(select * from sys.tables where name = 'ObsoleteTable')
BEGIN
UPDATE newTable
SET newTable.Name = obsoleteTable.Name
FROM dbo.NewTable newTable
INNER JOIN dbo.ObsoleteTable obsoleteTable
ON obsoleteTable.Id = newTable.Id
END
-- ObsoleteTable will be removed after this step
Сценарий 2
- Migrate из употребления Колонка Создать Колонка
- работ, если ObsoleteColumn и NewColumn как существует
- дает ошибку !!! если ObsoleteColumn удаляется уже
запросов Сценарий 2:
-- NewColumn has been created
IF EXISTS(select * from sys.columns where object_id = object_id('MyTable') AND name = 'ObsoleteColumn')
AND EXISTS(select * from sys.columns where object_id = object_id('MyTable') AND name = 'NewColumn')
BEGIN
UPDATE MyTable
SET NewColumn = ObsoleteColumn
END
-- Obsolete Column will be removed after this step
Msg 207, Level 16, State 1, Line 4 Неверное имя столбца 'ObsoleteColumn'.
Оба сценария в основном то же самое право? Только перенос в новую структуру, если устаревшая таблица/столбец существует. В противном случае игнорируйте.
Если я выполняю сценарий один, а ObsoleteTable уже удален. это не подведет. Так почему сценарий 2 терпит неудачу?
второй говорит ' если something1 AND something2', где 'something1' является false, ** никогда не будет true **, если эта таблица отсутствует. Я не вижу проблемы с этим. –
Это связано с использованием EXISTS vs =, которые должным образом вызывают ваше замешательство. –
@JarrodRoberson В обоих сценариях я проверяю, существует ли старая и новая таблица/столбец. Если либо новый, либо устаревший не существует, данные не должны (не могут) мигрироваться. – hwcverwe