2011-05-10 50 views
0

我有結構的表循環直通列在SQL Server 2008

TableA 
    ID price1 price2 price3 price4 rate1 rate2 rate3 rate4 
    1  10  11  12  13 2  3  2  2 

我想插入到另一個tableB的

ID Price Rate 
1 10 2 
1 11 3 

現在,在我的光標我正在獲取所有的值從表A成變量

Fetch next from cursor1 into @id,@price1,@price2,@price3,@price4,@rate1,@rate2,@rate3,@rate4 

獲取它後,我要插入到表B

我在表A的列要循環 所以INSERT語句

insert into tableB (Id,Price,Rate) values (@id,@price1,@rate1) 

但我將不得不給4 INSERT語句獲取值

有沒有一種方法,我可以循環,使我可以有一個單一的INSERT語句在循環

在這個例子中我給了短短4個列,但我有30列,以便其本質我需要進入循環

ŧ漢克斯

Prady

回答

7

你不需要爲這個遊標,可以從查詢直做 -

INSERT INTO TableB (id, price, rate) 
select id, price1, rate1 from TableA 
UNION ALL 
select id, price2, rate2 from TableA 
UNION ALL 
select id, price3, rate3 from TableA 
.. 
.. 

避免遊標如果可能的話,他們總是會有性能影響。

1

你正在尋找的語法是:

INSERT INTO TableB (ID, Price, Rate) 
VALUES 
(@id, @price1, @rate1), 
(@id, @price2, @rate2), 
... 
+0

不是真的......我正在尋找替換price1和rate1的方式,速率+我和價格+我就像那樣我在循環計數器 – Prady 2011-05-10 16:12:46

+2

@prady - 如果你使用這種語法,你可以做一個INSERT '使用你有的任何變量。你所說的建議聽起來像使用動態SQL創建一個'CURSOR',因爲你有一些未知的元素可以插入。 **這是一個非常糟糕的主意。** – JNK 2011-05-10 16:14:22