2016-03-16 2 views
0

В моей таблице table1 Я добавил столбец taxonomy_id, ссылающийся на столбец taxonomy_id таблицы taxonomy, который является столбцом идентификации. Теперь мне нужно вставить столько записей taxonomy, сколько есть записей в таблице table1, и мне нужно обновить table1.taxonomy_id по ссылке taxonomy.taxonomy_id соответственно.Добавить столбец, ссылающийся на столбец идентификации

Как это сделать на SQL-сервере? Я мог бы запустить курсор, вставить строки 1 на 1 и использовать scope_identity(), но это единственное решение?

В качестве примера набор данных и структура:

--drop table taxonomy 
create table taxonomy(taxonomy_id int identity, data varchar(50)) 

--drop table table1 
create table table1(table1_id int, taxonomy_id int) 

insert into table1 (table1_id) values (999), (777), (555), (22), (54423) 
+1

см. Вывод https://msdn.microsoft.com/en-us/library/ms177564.aspx – Paparazzi

ответ

0

Так вот что я сделал:

-- declare a temp table 
declare @temptab table(taxonomy_id int); 

-- insert new rows into taxonomy table 
-- return the IDs so we know which ones are the new ones 
insert into taxonomy(data) 
output inserted.taxonomy_id into @temptab 
select 'table1 taxonomy data' from table1 

-- update table1 with the IDs from the temp table 
update table1 
set taxonomy_id = t2.taxonomy_id 
from (
    -- using the row_number makes little sense but.. 
    -- I needed a way to pair @temptab and table1 rows 
    select table1_id, ROW_NUMBER() over (order by table1_id) from table1 
) t1(table1_id, rownum) 
inner join (
    select taxonomy_id, ROW_NUMBER() over (order by taxonomy_id) from @temptab 
) t2(taxonomy_id, rownum) 
on t1.rownum = t2.rownum 
where table1.table1_id = t1.table1_id 

Теперь каждый table1 запись подключен к записи в taxonomy таблице.

0

output

insert into table1 (col1, col2) values (2,3), ... 
output inserted.iden 

Я не следующие особенности вашей вставки, но выше механики для получения IDEN

??

insert into taxonomy (col1, col2) 
select col1, col2 from table1 
output inserted.id, inserted.col1, inserted.col2 
update table1 
    set table1.taxonomy_id = inserted.id 
    from table1 
    join inserted 
     on inserted.col1 = table1.col1 
     and inserted.col2 = table1.col2 
+0

Я боюсь, что этот код действительно не работает. – Jakub

+1

Добро пожаловать. Я боюсь, что этот вопрос не дал мне много работы. – Paparazzi

Смежные вопросы