Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Упорядоченный Update / 8 сообщений из 8, страница 1 из 1
23.09.2002, 18:03:32
    #32052465
George N
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Упорядоченный Update
Привет всем, подскажите, плиз:

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

Код: 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
23.09.2002, 18:09:30
    #32052468
MiCe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Упорядоченный Update
официально не гарантируют.....
если добавить order by - будет работать всегда...
...
Рейтинг: 0 / 0
23.09.2002, 18:10:53
    #32052470
George N
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Упорядоченный Update
order by к Update, к сожалению, никак не добавить...
...
Рейтинг: 0 / 0
23.09.2002, 18:25:16
    #32052475
MiCe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Упорядоченный Update
Код: 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
23.09.2002, 18:26:01
    #32052476
sergwsk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Упорядоченный Update
Относится к недокументированным возможностям, по крайней мере, MS SQL 6.5.
В коммерческих продуктах использовать не рекомендуется:
http://www.ozon.ru/?context=detail&id=88811
стр.511
...
Рейтинг: 0 / 0
23.09.2002, 18:35:10
    #32052483
MiCe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Упорядоченный Update
н-да.... посмотрел на результат и обломался....
нуно так....
Код: 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
23.09.2002, 18:38:07
    #32052484
jimmers
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Упорядоченный Update
2MiCe:

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


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