Один и тот же запрос выдает разные результаты в SQL

#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