|
|
#1 |
|
Участник
|
имеется следующий код:
while select forupdate _assemblyRollLine1 order by SortedOrder where(_assemblyRollLine1.RollId == RollId4Update) { _assemblyRollLine1.SortedOrder = i*1000; _assemblyRollLine1.update(); i++; } вопрос: должна ли данная конструкция привести к зацикливанию?
__________________
--- SHiSHok |
|
|
|
|
#2 |
|
Участник
|
Нет.
Выборка делается один раз, и сортируется по указанным критериям. После чего осуществляется проход по записям. Последний раз редактировалось SANTAN; 10.08.2006 в 16:39. |
|
|
|
|
#3 |
|
Модератор
|
Цитата:
Сообщение от SHiSHok
вопрос: должна ли данная конструкция привести к зацикливанию?
MSSQL, SP3, по SortedOrder есть некластерный индекс? http://support.microsoft.com/kb/843267/EN-US/ P.S. с ДИНАМИЧЕСКИМ курсором это поведение можно воспроизвести и на других версиях
__________________
-ТСЯ или -ТЬСЯ ? |
|
|
|
|
#4 |
|
Участник
|
Цитата:
Сообщение от Vadik
P.S. с ДИНАМИЧЕСКИМ курсором это поведение можно воспроизвести и на других версиях
|
|
|
|
|
#5 |
|
Участник
|
Вот кстати, как это обойти:
http://axforum.info/forums/showthrea...9028#post89028 Правда не проверял. У меня нет этогоглюка. Но надеюсь поможет. |
|
|
|
|
#6 |
|
Модератор
|
Цитата:
Сообщение от SANTAN
У меня на 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- без создания некластерного индекса - с созданным индексом
__________________
-ТСЯ или -ТЬСЯ ? |
|
|
|
|
#7 |
|
Участник
|
Цитата:
Сообщение от Vadik
МОЖЕТ
MSSQL, SP3, по SortedOrder есть некластерный индекс? Причем автор кода утверждает что он работал без проблем на момент написания (стоит MSSQL2ksp3 и апдейтов за это время не накатывалось)!
__________________
--- SHiSHok |
|
|
|
|
#8 |
|
Модератор
|
Цитата:
Сообщение от SHiSHok
есть но индекс включает 2 поля : RollId,SortedOrder .
Причем автор кода утверждает что он работал без проблем на момент написания (стоит MSSQL2ksp3 и апдейтов за это время не накатывалось)! ![]() Обходные пути: - как уже указывалось выше, добавить ограничения, мешающие записи отобраться для повторного изменения - строить перечень записей для обновления (обычно контейнер). примеры видел, искать к сожалению сейчас не готов
__________________
-ТСЯ или -ТЬСЯ ? |
|
|
|
|
#9 |
|
Участник
|
или просто убрать индекс по RollId,SortedOrder.
|
|
|
|
|
Похожие темы
|
||||
| Тема | Ответов | |||
| обновление поля в заданной таблице | 7 | |||
| Обновление перекрестных ссылок ест память | 22 | |||
| Обновление процедуры закрытия склада в АХ 3.0 | 10 | |||
| Обновление ... | 0 | |||
| Обновление detail-таблицы | 1 | |||
|