AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.08.2006, 16:05   #1  
SHiSHok is offline
SHiSHok
Участник
Аватар для SHiSHok
Дети Юза
 
219 / 103 (4) +++++
Регистрация: 28.07.2005
Адрес: Донецк
? обновление sorted by выборки
имеется следующий код:

while select forupdate _assemblyRollLine1 order by SortedOrder
where(_assemblyRollLine1.RollId == RollId4Update)
{
_assemblyRollLine1.SortedOrder = i*1000;
_assemblyRollLine1.update();
i++;
}

вопрос: должна ли данная конструкция привести к зацикливанию?
__________________
--- SHiSHok
Старый 10.08.2006, 16:23   #2  
SANTAN is offline
SANTAN
Участник
Аватар для SANTAN
 
20 / 12 (1) ++
Регистрация: 21.09.2005
Адрес: Kiev
Нет.
Выборка делается один раз, и сортируется по указанным критериям.
После чего осуществляется проход по записям.

Последний раз редактировалось SANTAN; 10.08.2006 в 16:39.
Старый 10.08.2006, 17:01   #3  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от SHiSHok
вопрос: должна ли данная конструкция привести к зацикливанию?
МОЖЕТ
MSSQL, SP3, по SortedOrder есть некластерный индекс?
http://support.microsoft.com/kb/843267/EN-US/

P.S. с ДИНАМИЧЕСКИМ курсором это поведение можно воспроизвести и на других версиях
__________________
-ТСЯ или -ТЬСЯ ?
Старый 10.08.2006, 17:48   #4  
SANTAN is offline
SANTAN
Участник
Аватар для SANTAN
 
20 / 12 (1) ++
Регистрация: 21.09.2005
Адрес: Kiev
Цитата:
Сообщение от Vadik

P.S. с ДИНАМИЧЕСКИМ курсором это поведение можно воспроизвести и на других версиях
У меня на 2005 не получается...
Старый 10.08.2006, 17:58   #5  
SANTAN is offline
SANTAN
Участник
Аватар для SANTAN
 
20 / 12 (1) ++
Регистрация: 21.09.2005
Адрес: Kiev
Вот кстати, как это обойти:
http://axforum.info/forums/showthrea...9028#post89028
Правда не проверял. У меня нет этогоглюка.
Но надеюсь поможет.
Старый 10.08.2006, 18:17   #6  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от SANTAN
У меня на 2005 не получается...
2005 под рукой нет

Код:
set nocount on
go

if object_id('tempdb..#t') is not null drop table #t
go

create table #t ([id] int not null identity primary key nonclustered, [value] int not null)
go

declare @i int 
set @i = 0
while @i < 10000 begin
	set @i = @i + 1
	insert into #t ([value]) select rand() * 1000
end
go

create index IX_T_Value on #t([value])
go

declare @id int, @value int, @cnt int

declare cr cursor dynamic for select [id], [value] from #t order by [value]

set @cnt = 0

open cr
fetch next from cr into @id, @value
while @@fetch_status = 0 begin
	set @cnt = @cnt + 1

	print 'Итерация ' + convert(varchar, @cnt) + ', id=' + convert(varchar, @id) + ', value = ' + convert(varchar, @value)

	update #t set [value] = [value] + rand() * 1000 - 500 where [id] = @id

	fetch next from cr into @id, @value
end

close cr
deallocate cr
go

drop table #t
go
сравните количество итераций
- без создания некластерного индекса
- с созданным индексом
__________________
-ТСЯ или -ТЬСЯ ?
Старый 11.08.2006, 00:31   #7  
SHiSHok is offline
SHiSHok
Участник
Аватар для SHiSHok
Дети Юза
 
219 / 103 (4) +++++
Регистрация: 28.07.2005
Адрес: Донецк
Цитата:
Сообщение от Vadik
МОЖЕТ
MSSQL, SP3, по SortedOrder есть некластерный индекс?
есть но индекс включает 2 поля : RollId,SortedOrder .
Причем автор кода утверждает что он работал без проблем на момент написания (стоит MSSQL2ksp3 и апдейтов за это время не накатывалось)!
__________________
--- SHiSHok
Старый 11.08.2006, 16:40   #8  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от SHiSHok
есть но индекс включает 2 поля : RollId,SortedOrder .
Причем автор кода утверждает что он работал без проблем на момент написания (стоит MSSQL2ksp3 и апдейтов за это время не накатывалось)!
Все возможно. Может быть, и работало. В зависимости от количества записей, индексов, статистик и бог знает чего еще выборка может делаться разными способами, например, раньше выбирался table scan. Будем считать, раньше Вам везло

Обходные пути:
- как уже указывалось выше, добавить ограничения, мешающие записи отобраться для повторного изменения
- строить перечень записей для обновления (обычно контейнер). примеры видел, искать к сожалению сейчас не готов
__________________
-ТСЯ или -ТЬСЯ ?
Старый 14.08.2006, 16:00   #9  
SANTAN is offline
SANTAN
Участник
Аватар для SANTAN
 
20 / 12 (1) ++
Регистрация: 21.09.2005
Адрес: Kiev
или просто убрать индекс по RollId,SortedOrder.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
обновление поля в заданной таблице Eldar9x DAX: Программирование 7 13.03.2009 15:32
Обновление перекрестных ссылок ест память Sada DAX: Программирование 22 11.10.2006 18:22
Обновление процедуры закрытия склада в АХ 3.0 Vadim Korepin DAX: Функционал 10 07.08.2006 16:21
Обновление ... SerAl DAX: Программирование 0 14.04.2005 19:57
Обновление detail-таблицы DreamCreator DAX: Программирование 1 05.04.2005 15:57

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 17:03.