Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
dkbait Member Откуда: Сообщений: 4 |
Помогите создать курсор. Есть таблица а1, в которой n1...n7 столбцов и одна строка. Мне надо брать по очереди данные, допустим, из столбца n1 этой таблицы и поместить их в другую таблицу а2. Затем перейти к следующему столбцу n2. Если в столбце нет данных, то перейти к следующему столбцу. |
30 ноя 12, 09:42 [13553932] Ответить | Цитировать Сообщить модератору |
kryak Member Откуда: Сообщений: 396 |
Курсор служит для перебора строк в результирующем наборе, а не слолбцов. |
30 ноя 12, 09:52 [13553975] Ответить | Цитировать Сообщить модератору |
PaulYoung Member Откуда: Москва Сообщений: 2565 |
|
||
30 ноя 12, 10:09 [13554047] Ответить | Цитировать Сообщить модератору |
PaulYoung Member Откуда: Москва Сообщений: 2565 |
dkbait, Ваша задача решается INSERT (или UPDATE) a2 ... SELECT n1...n7 FROM a1 с соответствующими условиями |
30 ноя 12, 10:12 [13554070] Ответить | Цитировать Сообщить модератору |
Гость333 Member Откуда: Сообщений: 3683 |
dkbait, Покажите структуру таблиц. PaulYoung, Сейчас окажется, что таблицы разной структуры и надо, скажем, транспонировать а1 :) Тогда ваш совет не пройдёт ;) |
30 ноя 12, 10:46 [13554234] Ответить | Цитировать Сообщить модератору |
dkbait Member Откуда: Сообщений: 4 |
Гость333, a1: поля n1...n7 varchar(120), остальные поля меня не интересуют a2: num_id (int,4), text varchar(120) При этом иногда содержание полей а1 будет меняться |
30 ноя 12, 12:14 [13554903] Ответить | Цитировать Сообщить модератору |
dkbait Member Откуда: Сообщений: 4 |
Гость333, Сори, фактически получается, что поля в а1 надо транспонировать в строки а2. Я просто чайник и только учусь. Но надеюсь, что форум помогает делать настоящие чудеса. |
30 ноя 12, 12:22 [13554981] Ответить | Цитировать Сообщить модератору |
AnaceH Member Откуда: Сообщений: 109 |
dkbait, UNPIVOT Или, если версия не позволяет, через серию юнионов select n1 from t union all select n2 from t итд Вот стало интересно, а почему вы решили воспользоваться курсором? Оно понятно что чайник и только учитесь, но обычно select, from, union и в принципе операции над множествами изучают задолго до курсоров. |
30 ноя 12, 12:34 [13555065] Ответить | Цитировать Сообщить модератору |
Гость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] Ответить | Цитировать Сообщить модератору |
dkbait Member Откуда: Сообщений: 4 |
Гость333, Спасибо большое, но UNPIVOT, к сожалению не работает. Задача следующая. Есть у меня пользователи, которые посылают запрос, ну скажем о том который час в городе N. Мне надо, отправить им информацию о времени и добавить какую-нибудь рекламку. Чтобы не париться, один раз в неделю обновляем рекламу, которая и содержится в а1. Если пользователь уже посылал запрос, ему в следующем запросе нужно присоединить следующую рекламку. Худо, бедно инсертами, апдейтами получили таблицу а2. Зациклили все это дело. Работает, но если у нас в а1 одно из полей n% пустое, то мне нужно в а2 взять рекламу из следующего поля. А мне инкорректит синтаксис. |
30 ноя 12, 13:28 [13555546] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |