Я изменяю структуру базы данных. Содержимое нескольких столбцов таблицы FinancialInstitution должно быть перенесено в таблицу Person . FinancialInstitution связано с лицом с внешним ключом. Каждому финансовому учреждению необходим идентификатор соответствующего лица. Таким образом, для каждой новой строки, вставленной в Person, идентификатор этой новой строки (IDENTITY) должен быть скопирован обратно в соответствующую строку FinancialInstitution.
Очевидный способ сделать это - итеративный код T-SQL. Но мне интересно знать, возможно ли это сделать только с помощью операций на основе множеств.
Я предполагал, что внутренний уровень такого запроса будет примерно таким:
INSERT INTO Person (Street1, Number1, City1, State1, PostCode1, CountryId1, WorkDirectPhone1, Fax1, Email1)
OUTPUT inserted.Id, FinancialInstitution.Id
SELECT Id, Street, Number, City, [State], PostCode, CountryId, PhoneNumber, Fax, Email
FROM FinancialInstitution;
К сожалению, кажется, что ВЫХОД не может соотноситься таким образом ...
sql-server
insert
output-clause
Юго Амарил
источник
источник
Person
? Или обновить существующие? Или ты хочешь вставитьPerson
и потомUPDATE FinancialInstitution
?Ответы:
Я думаю, вы могли бы (ab) использовать
MERGE
для этого. Сначала создайте (временную) таблицу:Затем
MERGE
вPerson
(вместоINSERT
), чтобы вы могли использовать столбцы таблиц, участвующих вOUTPUT
предложении:Затем используйте временную таблицу для
UPDATE FinancialInstitution
:Тест в: SQL-Fiddle
источник