powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Упорядоченный Update
8 сообщений из 8, страница 1 из 1
Упорядоченный Update
    #32052465
Фотография George N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем, подскажите, плиз:

Делаю такой вот запрос

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
if OBJECT_ID('tempdb..#Temp') is not null Drop Table #Temp

Create Table #Temp (RowID int IDENTITY, value int null)
Create clustered index IX_Temp on #temp(RowID)

insert into #temp default values
insert into #temp default values
insert into #temp default values
insert into #temp default values
insert into #temp default values

declare @value int

Update #Temp
set @value = value = IsNull(@value, 0 ) + RowID
from #temp with(Index(IX_Temp))

select * from #temp

Drop Table #Temp


Получаю:
RowID,value
1,1
2,3
3,6
4,10
5,15

Что абсолютно сответствует моим ожиданиям.

Вопрос: Можно ли быть уверенным, что Update всегда будет происходить в нужном порядке?
Или, что то же самое: Если идет сканирование кластерного индекса, всегда ли оно идет в порядке этого самого индекса?
...
Рейтинг: 0 / 0
Упорядоченный Update
    #32052468
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
официально не гарантируют.....
если добавить order by - будет работать всегда...
...
Рейтинг: 0 / 0
Упорядоченный Update
    #32052470
Фотография George N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
order by к Update, к сожалению, никак не добавить...
...
Рейтинг: 0 / 0
Упорядоченный Update
    #32052475
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
if OBJECT_ID('tempdb..#Tmp') is not null Drop Table #Tmp
Create Table #tmp (RowID int IDENTITY PRIMARY KEY CLUSTERED, value int null)

insert into #tmp default values
insert into #tmp default values
insert into #tmp default values
insert into #tmp default values
insert into #tmp default values

declare @value int

Update #tmp
set @value = value = IsNull(@value, 0 ) + a.RowID
from (select top  100  * from #tmp order by RowID) a
select * from #tmp
Drop Table #tmp
...
Рейтинг: 0 / 0
Упорядоченный Update
    #32052476
sergwsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Относится к недокументированным возможностям, по крайней мере, MS SQL 6.5.
В коммерческих продуктах использовать не рекомендуется:
http://www.ozon.ru/?context=detail&id=88811
стр.511
...
Рейтинг: 0 / 0
Упорядоченный Update
    #32052483
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
н-да.... посмотрел на результат и обломался....
нуно так....
Код: plaintext
1.
2.
Update #tmp
set @value = value = IsNull(@value, 0 ) + a.RowID
from (select top  100  RowID from #tmp order by RowID) a where a.RowID=#tmp.RowID
...
Рейтинг: 0 / 0
Упорядоченный Update
    #32052484
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2MiCe:

Что-то не то... Другой результат
...
Рейтинг: 0 / 0
Упорядоченный Update
    #32052491
Фотография George N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем, последний вариант довольно интересен, хотя и более ресурсоемкий. В плане исполнения стоит сортировка по букмарку, а определения букмарка не видно. Разберусь..
Проверю то же самое на реальном примере (3 млн записей).
Спасибо за идею.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Упорядоченный Update
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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