|  10.08.2006, 16:05 | #1 | 
| Участник |  обновление 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; 10.08.2006 в 16:39. | 
|  | 
|  10.08.2006, 17:01 | #3 | 
| Модератор | Цитата: 
		
			Сообщение от SHiSHok
			
			 вопрос: должна ли данная конструкция привести к зацикливанию? MSSQL, SP3, по SortedOrder есть некластерный индекс? http://support.microsoft.com/kb/843267/EN-US/ P.S. с ДИНАМИЧЕСКИМ курсором это поведение можно воспроизвести и на других версиях 
				__________________ -ТСЯ или -ТЬСЯ ? | 
|  | 
|  10.08.2006, 17:48 | #4 | 
| Участник | Цитата: 
		
			Сообщение от Vadik
			
			 P.S. с ДИНАМИЧЕСКИМ курсором это поведение можно воспроизвести и на других версиях   | 
|  | 
|  10.08.2006, 17:58 | #5 | 
| Участник | 
			
			Вот кстати, как это обойти: http://axforum.info/forums/showthrea...9028#post89028 Правда не проверял. У меня нет этогоглюка. Но надеюсь поможет. | 
|  | 
|  10.08.2006, 18:17 | #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- без создания некластерного индекса - с созданным индексом 
				__________________ -ТСЯ или -ТЬСЯ ? | 
|  | 
|  11.08.2006, 00:31 | #7 | 
| Участник | Цитата: 
		
			Сообщение от Vadik
			
			 МОЖЕТ MSSQL, SP3, по SortedOrder есть некластерный индекс? Причем автор кода утверждает что он работал без проблем на момент написания (стоит MSSQL2ksp3 и апдейтов за это время не накатывалось)! 
				__________________ --- SHiSHok | 
|  | 
|  11.08.2006, 16:40 | #8 | 
| Модератор | Цитата: 
		
			Сообщение от SHiSHok
			
			 есть но индекс включает 2 поля : RollId,SortedOrder . Причем автор кода утверждает что он работал без проблем на момент написания (стоит MSSQL2ksp3 и апдейтов за это время не накатывалось)!  Обходные пути: - как уже указывалось выше, добавить ограничения, мешающие записи отобраться для повторного изменения - строить перечень записей для обновления (обычно контейнер). примеры видел, искать к сожалению сейчас не готов 
				__________________ -ТСЯ или -ТЬСЯ ? | 
|  | 
|  14.08.2006, 16:00 | #9 | 
| Участник | 
			
			или просто убрать индекс по RollId,SortedOrder.
		 | 
|  | 
|  | 
|  Похожие темы | ||||
| Тема | Ответов | |||
| обновление поля в заданной таблице | 7 | |||
| Обновление перекрестных ссылок ест память | 22 | |||
| Обновление процедуры закрытия склада в АХ 3.0 | 10 | |||
| Обновление ... | 0 | |||
| Обновление detail-таблицы | 1 | |||
| 
 |