Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Не могу понять поведение ORDER BY  [new]
Timid
Member

Откуда: Украина, Винница
Сообщений: 277
Добрый день.

Версия сервера

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 
Microsoft SQL Server  2000 - 8.00.2187 (Intel X86) 
	Mar  9 2006 11:38:51 
	Copyright (c) 1988-2003 Microsoft Corporation
	Standard Edition on Windows NT 5.2 (Build 3790: Service Pack 2)

Столкнулся со следующей проблемой.

Вставляю данные во временную таблицу при помощи конструкции
SELECT ... INTO

Как-то так

SELECT 	a.Id				,
	left(TopicId,1) AS Class	,
	left(TopicId,2) AS Razdel	,
	left(TopicId,3) AS GRuppa	,
	TopicId				,
	CurrencyTag			,
	@UserId	 AS UserId		,
	@DayDate AS DayDate		,
	0.0000	 AS Total_TopicId	
INTO     #TmpAccBal
FROM  	Amounts a (NOLOCK)
WHERE	a.SubCount = 0
AND	(a.Opened < = @DayDate  AND (a.Closed = 0 OR a.Closed > @DayDate))
AND	a.UserId = @UserId
ORDER 	BY TopicId ASC, CurrencyTag ASC

Но на порядок сортировки, почему-то сервер не обращает внимания :( Пытался создавать кластерный индекс на поле TopicId, с явным указанием поорядка сортировки. Также создавал заранее таблицу #TmpAccBal, а потом инсертом заливал данные. Результата не дало

Вся проблема в том, что при занесении данных из этой таблицы в курсор

Declare CursorSaldoRev Cursor Local Static For

 
SELECT 	Id
	,Total_TopicId
	,Class
	,Razdel
	,TopicId
	,CurrencyTag
	,UserId
	,DayDate

FROM 	#TmpAccBal
ORDER 	BY TopicId ASC, CurrencyTag ASC

данные не вносятся в порядке указанной сортировки :(

Подскажите, может кто-то сталкивался, или я где-то что-то упустил из вида.
10 ноя 09, 20:27    [7910491]     Ответить | Цитировать Сообщить модератору
 Re: Не могу понять поведение ORDER BY  [new]
Glory
Member

Откуда:
Сообщений: 104760
Timid

Подскажите, может кто-то сталкивался, или я где-то что-то упустил из вида.

Сервер не будет добавлять данные в таблицу в заданном ORDER BY
10 ноя 09, 20:31    [7910503]     Ответить | Цитировать Сообщить модератору
 Re: Не могу понять поведение ORDER BY  [new]
Timid
Member

Откуда: Украина, Винница
Сообщений: 277
Glory
Timid

Подскажите, может кто-то сталкивался, или я где-то что-то упустил из вида.

Сервер не будет добавлять данные в таблицу в заданном ORDER BY


Подскажите, а каким образом тогда выстроить данные на входе курсора в нужном мне порядке?
10 ноя 09, 20:37    [7910517]     Ответить | Цитировать Сообщить модератору
 Re: Не могу понять поведение ORDER BY  [new]
Glory
Member

Откуда:
Сообщений: 104760
Timid
Glory
Timid

Подскажите, может кто-то сталкивался, или я где-то что-то упустил из вида.

Сервер не будет добавлять данные в таблицу в заданном ORDER BY


Подскажите, а каким образом тогда выстроить данные на входе курсора в нужном мне порядке?

Вы уже сделали это, задав ORDER BY TopicId ASC, CurrencyTag ASC в определении курсора
10 ноя 09, 20:43    [7910529]     Ответить | Цитировать Сообщить модератору
 Re: Не могу понять поведение ORDER BY  [new]
Timid
Member

Откуда: Украина, Винница
Сообщений: 277
Glory
Timid
Glory
Timid

Подскажите, может кто-то сталкивался, или я где-то что-то упустил из вида.

Сервер не будет добавлять данные в таблицу в заданном ORDER BY


Подскажите, а каким образом тогда выстроить данные на входе курсора в нужном мне порядке?

Вы уже сделали это, задав ORDER BY TopicId ASC, CurrencyTag ASC в определении курсора


Мда... Но в результирующем наборе (после отработки курсора) встречается TopicId = 2620, потом через некоторое время TopicId = 2600, потом снова TopicId = 2620, чего не должно быть при сортировке данных на входе курсора по TopicId. Уже не знаю, где копать :(
10 ноя 09, 20:53    [7910553]     Ответить | Цитировать Сообщить модератору
 Re: Не могу понять поведение ORDER BY  [new]
Glory
Member

Откуда:
Сообщений: 104760
Timid

Мда... Но в результирующем наборе (после отработки курсора) встречается TopicId = 2620, потом через некоторое время TopicId = 2600, потом снова TopicId = 2620, чего не должно быть при сортировке данных на входе курсора по TopicId. Уже не знаю, где копать :(

Судя по наличию left(TopicId,1 в тексте запросов вы пытаетесь символьное поле TopicId сортировать как числа. И удивляетесь, что сервер сортирует их все равно как символьные строки
10 ноя 09, 20:56    [7910561]     Ответить | Цитировать Сообщить модератору
 Re: Не могу понять поведение ORDER BY  [new]
Timid
Member

Откуда: Украина, Винница
Сообщений: 277
Glory
Timid

Мда... Но в результирующем наборе (после отработки курсора) встречается TopicId = 2620, потом через некоторое время TopicId = 2600, потом снова TopicId = 2620, чего не должно быть при сортировке данных на входе курсора по TopicId. Уже не знаю, где копать :(

Судя по наличию left(TopicId,1 в тексте запросов вы пытаетесь символьное поле TopicId сортировать как числа. И удивляетесь, что сервер сортирует их все равно как символьные строки


Нет, поле, по которому производится сортировка, имеет тип INTEGER.
А может ли быть проблема из-за того, что не все данные помещаются в курсор? Всего ок. 9000 записей
10 ноя 09, 20:59    [7910571]     Ответить | Цитировать Сообщить модератору
 Re: Не могу понять поведение ORDER BY  [new]
Glory
Member

Откуда:
Сообщений: 104760
Timid


Нет, поле, по которому производится сортировка, имеет тип INTEGER.
А может ли быть проблема из-за того, что не все данные помещаются в курсор? Всего ок. 9000 записей

Ищите ошибку в своей логике.
10 ноя 09, 21:02    [7910576]     Ответить | Цитировать Сообщить модератору
 Re: Не могу понять поведение ORDER BY  [new]
Timid
Member

Откуда: Украина, Винница
Сообщений: 277
Разобрался, спасибо. Почему-то выводило саму результирующую таблицу, заполняемую данными в курсоре, не в том порядке, в котором эти данные в неё записывались
10 ноя 09, 21:21    [7910627]     Ответить | Цитировать Сообщить модератору
 Re: Не могу понять поведение ORDER BY  [new]
iljy
Member

Откуда:
Сообщений: 8711
Timid
Разобрался, спасибо. Почему-то выводило саму результирующую таблицу, заполняемую данными в курсоре, не в том порядке, в котором эти данные в неё записывались

уж сколько раз твердили миру... Порядок выдачи данных гарантирует ТОЛЬКО указание ORDER BY в запросе. Порядок записи данных в таблицу тут вообще не при чем.
10 ноя 09, 21:27    [7910634]     Ответить | Цитировать Сообщить модератору
 Re: Не могу понять поведение ORDER BY  [new]
Timid
Member

Откуда: Украина, Винница
Сообщений: 277
iljy
Timid
Разобрался, спасибо. Почему-то выводило саму результирующую таблицу, заполняемую данными в курсоре, не в том порядке, в котором эти данные в неё записывались

уж сколько раз твердили миру... Порядок выдачи данных гарантирует ТОЛЬКО указание ORDER BY в запросе. Порядок записи данных в таблицу тут вообще не при чем.


Будем знать :)
10 ноя 09, 21:32    [7910652]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить