#sql-server-2005
#sql-server-2005
Вопрос:
На одной машине у нас есть набор данных, и скажем, у нас есть столбец isValid, который содержит true или false, и у нас также есть другой столбец, который определяет группу.Для каждой группы может быть только одно значение true для столбца Isvalid, а остальные — false.
Теперь, когда мы выполняем наш запрос на основе Group, строка, которая содержит столбец Isvalid как True, является первой строкой в результате запроса, а остальные строки содержат столбец Isvalid, которые являются false.
Здесь мы не используем никаких ‘order by’ или ‘group by’, мы просто используем условия ‘inner join’ и ‘where’.
Проблема в том, что на нашем сервере разработки и тестовом сервере мы получаем ожидаемые результаты запроса, но когда он отправляется на оперативный сервер (для всех трех серверов, т. е. для разработки, тестирования и оперативного сервера, данные совершенно разные, и все эти серверы работают на одной версии SQL 2005), результаты меняются местами (строка со столбцом isvalid false является первой строкой в результате запроса), не знаю почему.Пожалуйста, какие-либо предложения?
Пожалуйста, помогите,
Большое спасибо, Byfour
Ответ №1:
Очевидный ответ: разные данные на тестовом, разработчике и действующих серверах.
Но даже с теми же данными, без ORDER BY
предложения, результаты обычно возвращаются в порядке кластеризации индексов, НО это не гарантируется.
Если вам требуются результаты в определенном порядке, то вы должны использовать ORDER BY
предложение.
Комментарии:
1. здесь 100% согласен с Митчем. Нет ORDER BY, тогда порядок не гарантируется. Точка. Фрагментация, карусельный просмотр — это несколько случаев, когда порядок не может быть гарантирован с помощью out ORDER BY. msdn.microsoft.com/en-us/library/ms191475.aspx