Я использую SQL Server 2005 и хочу создать номерные записи адресов, обновляя записи контактов новыми идентификаторами:
Возьмите следующие таблицы
create table contact(id int primary key identity, home_address_id int, work_address_id int)
create table address(id int primary key identity, street varchar(25), number int)
И внешние ключи:
ALTER TABLE dbo.contact ADD CONSTRAINT FK_contact_address1 FOREIGN KEY (home_address_id) REFERENCES dbo.address(id)
ALTER TABLE dbo.contact ADD CONSTRAINT FK_contact_address2 FOREIGN KEY (work_address_id) REFERENCES dbo.address(id)
некоторые фиктивные данные
insert into contact default values
insert into contact default values
insert into contact default values
Как мне вставить пустую запись адреса по умолчанию для всех контактов, у которых нет домашнего адреса, и обновить home_address_id за один раз?
Первая часть проста:
insert into address(street) select null from contact where home_address_id is null
Я даже могу получить новые идентификаторы адресов:
declare @addressTable table(id int)
insert into address(street)
OUTPUT INSERTED.Id INTO @addressTable
select null from contact where home_address_id is null
Вот новый идентификатор
select * from @addressTable
Но как обновить таблицу контактов с помощью этих новых идентификаторов?