Цикл по столбцам в SQL Server 2008 - PullRequest
0 голосов
/ 10 мая 2011

У меня есть таблица со структурой

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

Я хочу вставить в другую таблицуB

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 into tableB (Id,Price,Rate) values (@id,@price1,@rate1)

Но мне пришлось быдать 4 оператора вставки, чтобы получить значения

Есть ли способ, которым я могу зациклить, чтобы я мог иметь один единственный оператор вставки в цикле

В этом примере я дал только 4 столбца, но у меня есть30 столбцов, так что мне необходимо войти в цикл

Спасибо

Prady

Ответы [ 2 ]

7 голосов
/ 10 мая 2011

Для этого вам не нужны курсоры, это можно сделать прямо из запроса -

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 голос
/ 10 мая 2011

Синтаксис, который вы ищете:

INSERT INTO TableB (ID, Price, Rate)
VALUES
(@id, @price1, @rate1),
(@id, @price2, @rate2),
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...