2013-09-03 2 views
8

Итак, для каждого отдельного значения в столбце одной таблицы я хочу вставить это уникальное значение в строку другой таблицы.Вставьте различные значения из одной таблицы в другую таблицу

list = select distinct(id) from table0 

for distinct_id in list 
insert into table1 (id) values (distinct_id) 
end 

Любые идеи относительно того, как это сделать?

ответ

19

Всякий раз, когда вы думаете о том, чтобы что-то делать в цикле, отступите назад и подумайте еще раз. SQL оптимизирован для работы с наборами. Вы можете сделать это с помощью запроса на основе набора без необходимости цикла:

INSERT dbo.table1(id) SELECT DISTINCT id FROM dbo.table0; 

Есть некоторые крайние случаи, когда зацикливание может сделать больше смысла, но, как SQL Server созревает и больше функциональных возможностей добавляется, эти крайние случаи получают уже и уже ...

+0

Можно ли создать таблицу с автоматическим обновлением, чтобы сохранить эти разные значения. I.e., если они удалены или обновлены в таблице 0, они также будут обновлены в таблице 1. –

+0

@Gabriel Конечно, создайте индексированный вид. –

+0

спасибо, я буду искать эту тему, создавая индексированные представления уникальных значений. Если бы они были уникальными датами многих «месяцев», все равно было бы одинаковое право? Я говорю о регистре датчиков, который хранит номера каждую секунду. И я хотел бы узнать, какие даты у меня есть для поиска внутри. –

5
insert into table1 (id) 
select distinct id from table0 
0

другой простой способ для копирования различных данных с несколькими столбцами из одной таблицы в другую

Insert into TBL2 
Select * from (Select COL1, ROW_NUMBER() over(PARTITION BY COL1 Order By COL1) AS COL2 From TBL1)T 
where T.COL2 = 1 
1

следующий оператор работает со мной.

insert into table1(col1, col2) select distinct on (col1) col1 col2 from table0 
Смежные вопросы