在SQL Server 2008中循环遍历列

Pra*_*ady 0 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
Run Code Online (Sandbox Code Playgroud)

我想插入另一个tableB

ID   Price Rate
 1    10    2
 1    11    3
Run Code Online (Sandbox Code Playgroud)

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

Fetch next from cursor1 into @id,@price1,@price2,@price3,@price4,@rate1,@rate2,@rate3,@rate4
Run Code Online (Sandbox Code Playgroud)

获取后我想插入TableB

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

 insert into tableB (Id,Price,Rate) values (@id,@price1,@rate1)
Run Code Online (Sandbox Code Playgroud)

但我必须给4插入语句来获取值

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

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

谢谢

Prady

d-l*_*ive 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
..
..
Run Code Online (Sandbox Code Playgroud)

尽可能避免使用游标,但它们总是会对性能产生影响.