Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Есть ли возможность выбирать из текущей записи курсора значение поля без FETCH NEXT?  [new]
Mikhail Tchervonenko
Member

Откуда: Münster, Germany
Сообщений: 1738
Доброе время суток всем!

Слышал что в MSSQL 2012 сабж уже возможен. (кстати примерчик бы тоже увидеть не помешал).
А как быть в 2008. Надоело промежуточные переменные определять и следить за их количеством и порядком в FETCH NEXT .
Возможно есть какой то способ которого я незнаю. Уж больно этот момент в 2008 и до него много кода требует местами.
(ностальгирую по временам FoxPro table.field).

Спасибо.
3 апр 13, 17:39    [14132352]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли возможность выбирать из текущей записи курсора значение поля без FETCH NEXT?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Откажитесь от курсоров.
3 апр 13, 17:39    [14132354]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли возможность выбирать из текущей записи курсора значение поля без FETCH NEXT?  [new]
Mikhail Tchervonenko
Member

Откуда: Münster, Germany
Сообщений: 1738
pkarklin,

местами не получается
3 апр 13, 17:41    [14132359]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли возможность выбирать из текущей записи курсора значение поля без FETCH NEXT?  [new]
Glory
Member

Откуда:
Сообщений: 104751
FETCH NEXT и позиционирует вас на какой то записи.
Вы спрашиваете как можно позиционироваться, не выполняя команды позиционирования ?
3 апр 13, 17:42    [14132363]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли возможность выбирать из текущей записи курсора значение поля без FETCH NEXT?  [new]
Mikhail Tchervonenko
Member

Откуда: Münster, Germany
Сообщений: 1738
Glory
FETCH NEXT и позиционирует вас на какой то записи.
Вы спрашиваете как можно позиционироваться, не выполняя команды позиционирования ?


Мне хотелось бы спозициинироваться напр с помощью FETCH NEXT FROM @cursor;
не указывая переменных в которые пишутся значения полей и обратиться напрямую к значению поля из текущей записи курсора.
3 апр 13, 17:57    [14132414]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли возможность выбирать из текущей записи курсора значение поля без FETCH NEXT?  [new]
Mikhail Tchervonenko
Member

Откуда: Münster, Germany
Сообщений: 1738
Mikhail Tchervonenko,

т.е. по сути хотелось бы чего то такого (понятно что приведённое ниже не работает).

FETCH NEXT FROM @Cursor;
IF (SELECT FieldName FROM @Cursor) = 'text'
......
3 апр 13, 18:03    [14132436]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли возможность выбирать из текущей записи курсора значение поля без FETCH NEXT?  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Mikhail Tchervonenko,

а чем по сути отличаеться от ?

fectch next from cur  into @var
if (@var ='text')
3 апр 13, 18:05    [14132444]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли возможность выбирать из текущей записи курсора значение поля без FETCH NEXT?  [new]
Mikhail Tchervonenko
Member

Откуда: Münster, Germany
Сообщений: 1738
Maxx
Mikhail Tchervonenko,

а чем по сути отличаеться от ?

fectch next from cur  into @var
if (@var ='text')

Тем что нужно в ручную определять внешнюю переменную, и следить за порядком полей и переменных.
При большом количестве полей это напрягает.
Да и по сути где логика, зачем создавать переменную если значение и так в памяти.
3 апр 13, 18:09    [14132454]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли возможность выбирать из текущей записи курсора значение поля без FETCH NEXT?  [new]
super-code
Member

Откуда:
Сообщений: 244
Mikhail Tchervonenko,

"where current of cursor_name", оно? Давно есть уже, не 2012
3 апр 13, 18:18    [14132479]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли возможность выбирать из текущей записи курсора значение поля без FETCH NEXT?  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
super-code,

а разве оно не для update/delete ?
3 апр 13, 18:21    [14132488]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли возможность выбирать из текущей записи курсора значение поля без FETCH NEXT?  [new]
super-code
Member

Откуда:
Сообщений: 244
Mikhail Tchervonenko,
прошу прощения, для select не работает, только для update

declare @tab table(i int)
declare @i int

insert @tab(i) values(1)


DECLARE vend_cursor CURSOR
    FOR SELECT * FROM @tab


OPEN vend_cursor
FETCH NEXT FROM vend_cursor
INTO @i;

update @tab
set i = 2
where current of vend_cursor

select i from @tab where current of vend_cursor
3 апр 13, 18:23    [14132496]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли возможность выбирать из текущей записи курсора значение поля без FETCH NEXT?  [new]
Mikhail Tchervonenko
Member

Откуда: Münster, Germany
Сообщений: 1738
super-code,

подозреваю что существует какая то служебная функция для подобной выемки значения из текущей записи курсора но не нашел её.
3 апр 13, 18:26    [14132509]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли возможность выбирать из текущей записи курсора значение поля без FETCH NEXT?  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
Mikhail Tchervonenko
нужно в ручную определять внешнюю переменную, и следить за порядком полей и переменных.
При большом количестве полей это напрягает.
Как вариант - установить SSMSBoost и использовать менюшку Copy all Headers - с небольшими правками, конечно, но порядок и состав полей перечислять уже не надо, просто Paste :) :

К сообщению приложен файл. Размер - 7Kb
3 апр 13, 18:50    [14132576]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли возможность выбирать из текущей записи курсора значение поля без FETCH NEXT?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Mikhail Tchervonenko
Да и по сути где логика, зачем создавать переменную если значение и так в памяти.

А почему вы решили, что "значение и так в памяти" ?
Курсор содержит только те поля, что декларированы в нем.
3 апр 13, 19:29    [14132655]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли возможность выбирать из текущей записи курсора значение поля без FETCH NEXT?  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Mikhail Tchervonenko
super-code,

подозреваю что существует какая то служебная функция для подобной выемки значения из текущей записи курсора но не нашел её.
Для SCROLL CURSOR - FETCH RELATIVE 0

Правильно советуют - забудьте пока курсоры.
Тем более они Вам не даются.
3 апр 13, 20:06    [14132752]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли возможность выбирать из текущей записи курсора значение поля без FETCH NEXT?  [new]
Mikhail Tchervonenko
Member

Откуда: Münster, Germany
Сообщений: 1738
Glory
Mikhail Tchervonenko
Да и по сути где логика, зачем создавать переменную если значение и так в памяти.

А почему вы решили, что "значение и так в памяти" ?
Курсор содержит только те поля, что декларированы в нем.

Я готов декларировать эти поля в курсоре (хотя местами и * не помешала бы.
Мне хочется только освободить код от больших FETCH.
3 апр 13, 20:14    [14132769]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли возможность выбирать из текущей записи курсора значение поля без FETCH NEXT?  [new]
Mikhail Tchervonenko
Member

Откуда: Münster, Germany
Сообщений: 1738
iap
Mikhail Tchervonenko
super-code,

подозреваю что существует какая то служебная функция для подобной выемки значения из текущей записи курсора но не нашел её.
Для SCROLL CURSOR - FETCH RELATIVE 0

Правильно советуют - забудьте пока курсоры.
Тем более они Вам не даются.

Спасибо.
К сожалению при данной логике базы совсем отказаться от курсоров не получится. А почему такая логика уже вопрос не ко мне, к сожалению.
3 апр 13, 20:16    [14132774]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли возможность выбирать из текущей записи курсора значение поля без FETCH NEXT?  [new]
Mikhail Tchervonenko
Member

Откуда: Münster, Germany
Сообщений: 1738
Cygapb-007
Mikhail Tchervonenko
нужно в ручную определять внешнюю переменную, и следить за порядком полей и переменных.
При большом количестве полей это напрягает.
Как вариант - установить SSMSBoost и использовать менюшку Copy all Headers - с небольшими правками, конечно, но порядок и состав полей перечислять уже не надо, просто Paste :) :

Спасибо, попробую.
3 апр 13, 20:17    [14132777]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли возможность выбирать из текущей записи курсора значение поля без FETCH NEXT?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Mikhail Tchervonenko,

Реализуйте аналог sp_executeresultset, которой не стало, начиная 2005 с версии. Но это будет динамика.
3 апр 13, 20:35    [14132811]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли возможность выбирать из текущей записи курсора значение поля без FETCH NEXT?  [new]
Mikhail Tchervonenko
Member

Откуда: Münster, Germany
Сообщений: 1738
pkarklin,

интересная мысль, можно попробовать.
3 апр 13, 20:54    [14132866]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли возможность выбирать из текущей записи курсора значение поля без FETCH NEXT?  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
Еще одна врезочка, сорри :)
Приведенный внизу рисунок генерирует следующий текст (шаблон для SSMSBoost набросал за 15 минут, в скрипт вставлено простым Paste):
declare <CursorName,sysname,MyCursor> cursor <CursorOptions,varchar(1000),FAST_FORWARD> for
select @journal_ctrl_num,@date_applied
  from <TableName,sysname,MyTable>;

declare @journal_ctrl_num,@date_applied;

open <CursorName,sysname,MyCursor>;

while 1=1 begin
  fetch next from <CursorName,sysname,MyCursor>
    into @journal_ctrl_num,@date_applied;
if @@fetch_status!=0 break;
  -- тело курсора
end

close <CursorName,sysname,MyCursor>
deallocate <CursorName,sysname,MyCursor>
Далее Ctrl+Shif+M и причесывание готового курсора:)

К сообщению приложен файл. Размер - 12Kb
3 апр 13, 21:09    [14132904]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли возможность выбирать из текущей записи курсора значение поля без FETCH NEXT?  [new]
Mikhail Tchervonenko
Member

Откуда: Münster, Germany
Сообщений: 1738
Cygapb-007,

спасибо
3 апр 13, 22:03    [14133042]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли возможность выбирать из текущей записи курсора значение поля без FETCH NEXT?  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8879
Уважаемый ТС,
проблема шире, чем Вам кажется.
При грамотной организации, курсор НЕ должен содержать большого количества полей.

PS Что бы тут не говорили, но курсор - это достаточно удобное средство / неизбежное зло - подчеркнуть любимое. Не надо только его ассоциировать с понятием "двумерных массивов данных". Скуль заточен под обработку таблиц, но не массивов (и тем более - курсоров).

..... Хотя, вот, xml усиленно продвигают....
4 апр 13, 01:06    [14133444]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли возможность выбирать из текущей записи курсора значение поля без FETCH NEXT?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Mikhail Tchervonenko
Я готов декларировать эти поля в курсоре (хотя местами и * не помешала бы.
Мне хочется только освободить код от больших FETCH.

FETCH <only PK>
select * from mytable where PK = <fetched PK>
4 апр 13, 09:14    [14133794]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли возможность выбирать из текущей записи курсора значение поля без FETCH NEXT?  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
но select where pk=@pk - снова в переменные
4 апр 13, 09:29    [14133850]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить