У меня есть две таблицы, TableA
и TableB
так:INSERT в таблицу и UPDATE внешнего ключа в другой таблице (SQL Server 2008)
TableA
-------------------------------------------
| id | some_data | new_FK_column_on_B |
| ---- | ----------- | ------------------ |
| 1 | ... | null |
| ... | ... | null |
| 999 | ... | null |
-------------------------------------------
TableB
----------------------
| id | some_data |
| ---- | ----------- |
| | |
----------------------
На данный момент TableB
пуст, и FK колонки в TableA
является null
для всех строк. Мне нужно написать одноразовый инициализирующий скрипт, чтобы заполнить TableB
и инициализировать столбец FK для некоторых строк (критерий, не для всех) в TableA
с помощью идентификаторов из строк, вставленных в TableB
.
Я знаю два способа сделать это:
1) с использованием while
и scope_identity()
, вставляя новую строку в TableB
и обновление TableA
на каждой итерации, в то время как существует строки в TableA
, которые должны быть обновлены
while (exists (select 1 from TableA where [condition]))
begin
insert into TableB (some_data) values ('some_data')
update TableA set new_FK_column_on_B
where id = (select top 1 id from TableA where [condition])
end
2) создать колонку temp в TableB
, сохраняя id
строки в TableA
, для которой она была вставлена, а затем обновить TableA
, используя join
alter table TableB add temp int
go
insert into TableB (some_data, temp) select 'some_data', id from TableA where [condition]
update TableA
set new_FK_column_on_B = b.id
from TableB as b
join TableA as a on a.id = b.temp
alter table TableB drop column temp
Кроме того, я пытался как-то использовать output
из insert
, как это, но это синтаксис неверен:
update TableA
set new_FK_column_on_B =
(
select insertedId from
(
insert into TableB (some_data)
output inserter.id as insertedId
values ('some_data')
)
)
where [condition]
Есть ли более простой способ сделать это Whithout с помощью while
или модификации любой таблицы?
Это не случай, потому что 'some_data' не то же самое для' TableA' и 'TableB'. Это может быть различное количество столбцов, разных типов, и оно не уникально в таблице, оно может повторяться. – user2123532
Я думаю, что это не полный ответ, как сказал @ user2123532. – roll