循环遍历表SQL

时间:2015-09-22 19:07:05

标签: sql sql-server sql-server-2012

好的,所以我有这个临时表。它包含公司需要发货的所有订单。我需要以某种方式遍历表并将信息插入3+表。

@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

有更好的方法吗?

在我的问题上添加更多内容

我从VB.Net中获取了3个值,例如@ Price,@ Date和@DateDue。因为我不能只做一个select语句导致值与此混合传递价值。

2 个答案:

答案 0 :(得分:2)

在单个查询中执行

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

答案 1 :(得分:0)

循环效率不高。总是尽量避免它。您将需要两个查询:一个用于选择和插入,一个用于删除

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

DELETE FROM @temptable;

另请注意@temptable的生命周期有限。因此 - 根据具体情况 - 可能根本不需要删除它。