powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как избежать курсора? помогите люди добрые!
14 сообщений из 14, страница 1 из 1
Как избежать курсора? помогите люди добрые!
    #32047847
vika
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не люблю я курсоры. Просто не люблю. Может кто подскажет как можно избежать курсора если нужно сделать так:

DECLARE @NO AS INT, @i AS INT

SET @i=0
DECLARE UPTD CURSOR
FOR select NO from tb
OPEN UPTD
FETCH NEXT FROM UPTD INTO @JNO
while @@FETCH_STATUS <> -1
BEGIN
UPDATE tb SET NO=@i+1
SET @i=@i+1
FETCH NEXT FROM UPTD INTO @NO
END
CLOSE UPTD
DEALLOCATE UPTD
...
Рейтинг: 0 / 0
Как избежать курсора? помогите люди добрые!
    #32047849
Фотография Jimmy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если я не стормозил, то Ваш код делает именно это:

Код: plaintext
1.
2.
3.
declare @сount int
select @count = count(*) from tb
update tb set no = @count +  1 
...
Рейтинг: 0 / 0
Как избежать курсора? помогите люди добрые!
    #32047850
dkstranger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самое простое так

DECLARE @NO AS INT, @i AS INT

SET @i=0
while @i<@no begin
select @i=@i+1
end
...
Рейтинг: 0 / 0
Как избежать курсора? помогите люди добрые!
    #32047853
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да уж, странный код.
Словами объясните что нужно то.
...
Рейтинг: 0 / 0
Как избежать курсора? помогите люди добрые!
    #32047855
Фотография Maxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сегодня что 1 Апреля
...
Рейтинг: 0 / 0
Как избежать курсора? помогите люди добрые!
    #32047860
Фотография Александр Степанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может, что-то вроде этого?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
create table tb
(
	pk int not null,
	[NO] int
)

insert into tb(pk) values( 1 )
insert into tb(pk) values( 7 )
insert into tb(pk) values( 4 )
insert into tb(pk) values( 6 )
insert into tb(pk) values( 3 )
insert into tb(pk) values( 2 )
insert into tb(pk) values( 5 )

GO

DECLARE @NO int
Set @NO=- 1 

UpDate tb
Set @NO=NO=@NO+ 1 

Select * from tb


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

С уважением,
Александр Степанов
...
Рейтинг: 0 / 0
Как избежать курсора? помогите люди добрые!
    #32047870
vika
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если словами то так:
имеем таблицу и надо один из столбцов в ней пронумеровать основываясь на значениях другого столбца при этом необходимо учитывать порядок сортировки оного
т.е.
col1 col2 col3
4 qqq 2456
1 mmm 1455
4 yyy 2456
...
Рейтинг: 0 / 0
Как избежать курсора? помогите люди добрые!
    #32047973
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
имеем таблицу и надо один из столбцов в ней пронумеровать основываясь на значениях другого столбца при этом необходимо учитывать порядок сортировки оного


Тогда вариант Степанова не подходит. Я бы сделал так:
Код: plaintext
1.
2.
3.
4.
5.
6.
create table #counter (count int identety( 1 ,  1 ), col3 int)
insert into #Counter (col3)
select col3 from YourTable group by col3
update yt set yt.col1 = c.count from YourTable yt
inner join #Counter c on yt.col3 = c.Col3
drop table #Counter


Если сервер 2000-й можно вместо временной таблицы использовать переменную типа table.
...
Рейтинг: 0 / 0
Как избежать курсора? помогите люди добрые!
    #32047977
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорри, пропустил order by col3 при вставке во временную таблицу.
...
Рейтинг: 0 / 0
Как избежать курсора? помогите люди добрые!
    #32048021
Фотография Александр Степанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Genady

В первоначальной постановке задачи (т.е. скрипте) никакими order by и не пахло :-)))

Если нужен именно order by, то IMHO вариант с временной таблицей мне нравится больше остальных. Тем не менее настоятельно рекомендую Вике воспользоваться поиском и посмотреть на все предложенные варианты.
...
Рейтинг: 0 / 0
Как избежать курсора? помогите люди добрые!
    #32048035
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В первоначальной постановке задачи (т.е. скрипте) никакими order by и не пахло :-)))

А в скрипте и нумерацией не пахло, то что делает скрипт Jimmy в трех строках изобразил. :)
...
Рейтинг: 0 / 0
Как избежать курсора? помогите люди добрые!
    #32048048
Фотография Александр Степанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Genady

Правда ваша! Каюсь, невнимательно посмотрел, с кем не бывает! ;-)
...
Рейтинг: 0 / 0
Как избежать курсора? помогите люди добрые!
    #32048055
Фотография MichaelGK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не удивлюсь если здесь появится постинг:
" Ну что, SQL - эротоманы, здорово я вас зацепила на слабости к женскому полу, такую белеберду заставила на полном серьезе решать"
GreenSunrise
...
Рейтинг: 0 / 0
Как избежать курсора? помогите люди добрые!
    #32048146
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дико извиняюсь за влезание в беседу, MichaelGK, у меня к вам вопрос - а я-то тут при чем? Не припомню за собой привычки плодить идиотские топики. Может, покажете? Я вообще редко здесь что-либо спрашиваю.

P.S. Под другими никами не захожу, поверьте на слово.

P.P.S. Съем мышиный коврик, если найдете хоть один мой топик, где была попытка сыграть на жалости к женскому полу.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как избежать курсора? помогите люди добрые!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]