Я использую 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
Но как обновить таблицу контактов с этими новыми идентификаторами?