Я начал со столом, который выглядел примерно так:Вставка и обновление
Собака (ID, пол, имя)
Было принято решение о создании нового владельца таблицы.
Владелец (ID, Имя)
где владелец-идентификатор типа GUID данных.
и обновлять таблицу Собака на:
Собака (ID, пол, имя, OwnerId)
в качестве базы данных в настоящее время используется несколькими программами и не все программы могут быть обновлены в то же время было принято решение не применять это новое отношение, и поэтому значения null были разрешены для OwnerID, но любое значение в идентификаторе владельца собаки должно соответствовать значению в таблице Owner.
Теперь мы достигли точки, где все программное обеспечение создает собак, у которых есть владельцы, но мы хотим исправить записи, в которых у собак нет владельцев.
Мы хотим создать пустую запись владельца для каждой собаки, у которой в настоящее время нет владельца. Мы не беспокоимся о двух собаках, имеющих одного и того же владельца, поскольку это может быть изменено позже, если это необходимо.
Что было бы самым эффективным способом достижения этого? Эффективно Я ищу
INSERT INTO [dbo].[Owner]
([ID],[Name])
VALUES
(newid(), 'n/a')
Для каждой собаки, где OwnerId собаки равна нулю.
Затем Обновление
UPDATE [dbo].[Dog]
SET [Owner_ID] = NewIDFromAbove
Есть ли один оператор или подобный аккуратный способ сделать это? Слияние было бы полезно здесь?
как это может помочь с обновлениями? – Jayvee
Невозможно с помощью одного оператора, но мы можем использовать таблицу @newIds в следующем выражении, например, в Update Dog ... –