Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 курсор  [new]
dkbait
Member

Откуда:
Сообщений: 4
Помогите создать курсор. Есть таблица а1, в которой n1...n7 столбцов и одна строка. Мне надо брать по очереди данные, допустим, из столбца n1 этой таблицы и поместить их в другую таблицу а2. Затем перейти к следующему столбцу n2. Если в столбце нет данных, то перейти к следующему столбцу.
30 ноя 12, 09:42    [13553932]     Ответить | Цитировать Сообщить модератору
 Re: курсор  [new]
kryak
Member

Откуда:
Сообщений: 396
Курсор служит для перебора строк в результирующем наборе, а не слолбцов.
30 ноя 12, 09:52    [13553975]     Ответить | Цитировать Сообщить модератору
 Re: курсор  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2565
kryak
Курсор служит для перебора строк в результирующем наборе, а не слолбцов.
Ну если сделать список столбцов, а потом пользовать курсор с динамикой, то почему бы и нет? Тока нафик оно всё нужно...
30 ноя 12, 10:09    [13554047]     Ответить | Цитировать Сообщить модератору
 Re: курсор  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2565
dkbait, Ваша задача решается INSERT (или UPDATE) a2 ... SELECT n1...n7 FROM a1 с соответствующими условиями
30 ноя 12, 10:12    [13554070]     Ответить | Цитировать Сообщить модератору
 Re: курсор  [new]
Гость333
Member

Откуда:
Сообщений: 3683
dkbait,

Покажите структуру таблиц.

PaulYoung,

Сейчас окажется, что таблицы разной структуры и надо, скажем, транспонировать а1 :)
Тогда ваш совет не пройдёт ;)
30 ноя 12, 10:46    [13554234]     Ответить | Цитировать Сообщить модератору
 Re: курсор  [new]
dkbait
Member

Откуда:
Сообщений: 4
Гость333,
a1: поля n1...n7 varchar(120), остальные поля меня не интересуют
a2: num_id (int,4), text varchar(120)
При этом иногда содержание полей а1 будет меняться
30 ноя 12, 12:14    [13554903]     Ответить | Цитировать Сообщить модератору
 Re: курсор  [new]
dkbait
Member

Откуда:
Сообщений: 4
Гость333,
Сори, фактически получается, что поля в а1 надо транспонировать в строки а2. Я просто чайник и только учусь. Но надеюсь, что форум помогает делать настоящие чудеса.
30 ноя 12, 12:22    [13554981]     Ответить | Цитировать Сообщить модератору
 Re: курсор  [new]
AnaceH
Member

Откуда:
Сообщений: 109
dkbait,

UNPIVOT
Или, если версия не позволяет, через серию юнионов
select n1 from t
union all
select n2 from t
итд

Вот стало интересно, а почему вы решили воспользоваться курсором? Оно понятно что чайник и только учитесь, но обычно select, from, union и в принципе операции над множествами изучают задолго до курсоров.
30 ноя 12, 12:34    [13555065]     Ответить | Цитировать Сообщить модератору
 Re: курсор  [new]
Гость333
Member

Откуда:
Сообщений: 3683
dkbait,

Пример с UNPIVOT:

CREATE TABLE #a1
(   n1 VARCHAR(120),
    n2 VARCHAR(120),
    n3 VARCHAR(120),
    n4 VARCHAR(120),
    n5 VARCHAR(120),
    n6 VARCHAR(120),
    n7 VARCHAR(120)
);

INSERT #a1 VALUES ('Значение 1', 'Значение 2', 'Значение 3', 'Значение 4', 'Значение 5', 'Значение 6', 'Значение 7');

SELECT CAST(STUFF(n, 1, 1, '') AS INT) AS num_id, text
FROM
(
  SELECT n1, n2, n3, n4, n5, n6, n7
  FROM #a1 a
) t
UNPIVOT(text FOR n IN (n1, n2, n3, n4, n5, n6, n7)) u;
30 ноя 12, 12:56    [13555270]     Ответить | Цитировать Сообщить модератору
 Re: курсор  [new]
dkbait
Member

Откуда:
Сообщений: 4
Гость333,

Спасибо большое, но UNPIVOT, к сожалению не работает.
Задача следующая. Есть у меня пользователи, которые посылают запрос, ну скажем о том который час в городе N. Мне надо, отправить им информацию о времени и добавить какую-нибудь рекламку. Чтобы не париться, один раз в неделю обновляем рекламу, которая и содержится в а1. Если пользователь уже посылал запрос, ему в следующем запросе нужно присоединить следующую рекламку. Худо, бедно инсертами, апдейтами получили таблицу а2. Зациклили все это дело. Работает, но если у нас в а1 одно из полей n% пустое, то мне нужно в а2 взять рекламу из следующего поля. А мне инкорректит синтаксис.
30 ноя 12, 13:28    [13555546]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить