在SQL Server 2008中循环遍历列

时间:2011-05-10 16:03:44

标签: sql sql-server 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

现在在我的光标中,我将TableA中的所有值提取到变量

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

获取后我想插入TableB

我想遍历TableA的列 所以insert语句是

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

但是我必须给出4个insert语句来获取值

有没有办法可以循环,所以我可以在循环中有一个插入语句

在这个例子中,我只给了4列,但我有30列,所以我需要进入循环

由于

Prady

2 个答案:

答案 0 :(得分: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 :(得分:1)

您正在寻找的语法是:

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