используя хранимую процедуру, найдите причину беспорядка в результирующем наборе

Я столкнулся с проблемой в хранимой процедуре sql. у меня есть хранимая процедура, которая содержит динамический запрос sql, создание временных таблиц, вставку данных в эти временные таблицы. в моей локальной сети результат этой хранимой процедуры отображается нормально. но в производственной среде порядок результатов изменен. у меня есть только разрешение на выбор для этого производства, поэтому я не могу запустить этот sp в базе данных производства. может ли кто-нибудь предложить какое-либо решение. есть ли возможность запустить этот SP и просмотреть результат в production sp. спасибо


person user638904    schedule 06.04.2011    source источник


Ответы (3)


Боюсь, ваш вопрос не очень конкретен, но если вы полагаетесь на порядок результатов и не используете ORDER BY в запросе, который возвращает результаты (в вашем случае это, вероятно, последний оператор), тогда вы должен. Порядок результатов не гарантируется, если вы не используете ORDER BY.

Если вы уже это сделали, возможно, вы могли бы опубликовать соответствующие части вашего запроса.

person Kieren Johnstone    schedule 06.04.2011
comment
Спасибо за все ваши ответы. заказ выполняется в запросе. основная проблема заключается в том, что это происходит только для одной хранимой процедуры, а не для других Sp. пожалуйста, дайте мне знать, если вам нужны какие-либо другие детали - person user638904; 06.04.2011

Я бы проверил, что сопоставление двух баз данных одинаково. Предполагая, что сервер MS Sql, щелкните правой кнопкой мыши узел базы данных в Mgmt Studio и просмотрите свойства. Сопоставление будет что-то вроде SQL_Latin1_General_CP1_CI_AS.

Если они не совпадают, вполне возможно, что «естественный» порядок сортировки будет другим, если только вы не укажете явным образом ORDER BYclause.

person Widor    schedule 06.04.2011
comment
привет, в обеих средах сортировка одинакова. вот краткое описание запроса. сначала мы выбираем записи и вставляем их во временную таблицу. затем создал еще одну временную таблицу для хранения окончательных результатов. в этой временной таблице сначала мы вставляем заголовки. 'вставить в значения #TempChaseReport (''FName студента'',''LName студента'',''Практический экзамен 1'',''Практический экзамен 2'')' - person user638904; 07.04.2011
comment
затем я перебираю выбранные записи на первом этапе и вставляю их в эту таблицу tempChaseReport. после вставки всех записей я создал еще одну временную таблицу, где я делаю следующий запрос. вставить в #TempChaseReport2 Выберите * ИЗ #TempChaseReport, где id_num=1 вставьте в #TempChaseReport2 Выберите * ИЗ #TempChaseReport, где id_num!=1 упорядочить по MgrLoginID,LastName,myflag. - person user638904; 07.04.2011
comment
в конце, когда я, наконец, выбираю записи для отображения. - person user638904; 07.04.2011
comment
Я вижу, вы делаете SELECT *, но ORDER BY перечисляет определенные столбцы. Вы пытались увидеть, что происходит, когда вы явно заказываете КАЖДЫЙ столбец? Затем удалите их из пункта ORDER BY 1 на 1, пока порядок сортировки не изменится — в этот момент вы знаете, что такое проблемный столбец. - person Widor; 07.04.2011

Я могу думать о двух возможностях с головы без дополнительной информации:

1) Производство и ваша локальная среда настроены по-разному, особенно в отношении сортировки базы данных tempdb (которая будет сортировкой по умолчанию, используемой временными таблицами, если вы не укажете иное в их операторе CREATE). Поэтому любой порядок символьных полей будет вести себя по-разному.

2) Вы вообще не выполняете какой-либо конкретный порядок, и в этом случае порядок «по умолчанию» диктуется многими вещами и вряд ли будет одинаковым для разных серверов.

person MartW    schedule 06.04.2011
comment
я сделал заказ в хранимой процедуре. я просто проверяю сопоставление в обеих базах данных. Спасибо за ваш ответ. - person user638904; 06.04.2011
comment
сопоставление одинаково в обеих базах данных. пожалуйста, дайте мне знать, есть ли какой-либо другой параметр. - person user638904; 08.04.2011