2015-09-22 6 views
-2

Итак, у меня есть эта таблица темп. Он имеет все заказы, которые компания должна отправить. Мне нужно как-то пройти через таблицу и вставить информацию в 3 + таблицы.Цитирование через таблицу SQL

@TempTable Table 
(
    OrderID Int 
) 

Declare @value int = (select count(orderID) from @temptable) 
Declare @i int = 1 
WHILE @i < @value BEGIN 
    Declare @orderid= (select first(orderid) from @temptable) 
    INSERT INTO shipment (orderid, Price, Date, DateDue) 
    VALUES (@orderid, @Price, @Date, @DateDue); 
    Set @i += 1 
    Delete top(1) from @temptable 
END 

Есть ли лучший способ сделать это?

Добавление немного больше к моему вопросу

Я везу в 3-х значений из VB.Net, что в качестве примера можно @price, @date и @ DateDue.Because этого я не был способный просто делать оператор select, вызывая смешение значений с этими переданными значениями.

+0

Вы можете сделать это в одном запросе. –

+3

Возможный дубликат [SQL Insert into ... values ​​(SELECT ... FROM ...)] (http://stackoverflow.com/questions/25969/sql-insert-into-values-select-from) – APH

+0

Нет только он неэффективен, он также потенциально неточен. У вас есть delete top 1, но у вас нет порядка. Вы также используете сначала, но функция в sql-сервере - first_value. –

ответ

0

Цикличность не является эффективным. Всегда старайтесь избегать этого. Вам понадобятся два запроса: один для выбора и вставки и один для удаления

INSERT INTO shipment (orderid, Price, Date, DateDue) 
SELECT orderid, @Price, @Date, @DateDue FROM @temptable; 

DELETE FROM @temptable; 

Заметим также, что @temptable имеет ограниченный срок службы. Поэтому - в зависимости от ситуации - удаление может вообще не понадобиться.

+0

Обычно я согласен с вами но моя проблема заключается в других значениях не из соблазнительной, поэтому я не могу просто выбрать из соблазнительной. – blackpluribus

+0

Ну, если эти другие значения являются парапараметрами, то используйте параметры. Я изменил запрос соответствующим образом. –

2

это сделать в одном запросе

INSERT INTO (orderid, -some other value-) 
    SELECT orderid, -some other value- 
    FROM @temptable 
+0

Как самый быстрый плюс 1 я когда-либо получил –

+0

lol, вы можете. :) –

+0

Выполняется ли это, если другие значения передаются из кода? – blackpluribus

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