2012-01-06 5 views
2

У меня есть хранимая процедура, которая не только огромна, но и очень интенсивна. Эта первая хранимая процедура создается для подробного отчета. Вторая хранимая процедура вызывает первую хранимую процедуру, помещает информацию в временную таблицу и затем выбирает информацию из этой временной таблицы и суммирует ее.Подвести информацию из одной хранимой процедуры в другой хранимой процедуре

Теперь второй хранимой процедуре не нужна вся информация в хранимой процедуре подробно, она нуждается лишь в некоторой ее части.

Наш DBA назвал этот подход безрассудным и сделал другие предложения, такие как «сохраняйте это на реальной таблице, чтобы он запускался один раз в день». На самом деле этого не произойдет, потому что многочисленные пользователи могут запускать любой отчет много раз в день и для разных диапазонов дат. Его другое предложение было для SUM без временной таблицы, но я не уверен, как вы выбираете из одной хранимой процедуры только определенные поля.

У меня есть два вопроса: как я буду следовать его второму предложению SUM без таблицы temp, и если это невозможно сделать, есть ли у кого-нибудь предложения по наилучшему подходу к обобщению необходимых данных для сводки отчет?

Обе эти хранимые процедуры предназначены для отдельных отчетов. Один для подробностей, а другой отчет - сводка. Конечные пользователи могут запускать их для разных магазинов и разных периодов времени.

ответ

1

Почему бы не поместить данные в представление и не ударить по обоим сохраненным процессам? Это уменьшит сложность обоих процессов (но переместит их в представление).

В зависимости от структуры вашего запроса вы могли бы даже создать индексированный вид, который создавал бы сохраненную форму данных и позволял бы использовать индексы.

+0

Как бы эта работа, когда конечный пользователь может запустить его в течение какого-либо периода времени? – DataGirl

+1

Вам нужно будет указать любые столбцы, которые необходимо фильтровать в представлении. Поэтому, если есть дата начала или окончания, которую вы фильтруете, вам необходимо удалить это из предложения where, которое заполняет ваше представление и включать его в вашу сохраненную логику proc. –

1

Если выбрать во внутреннем SP является quitely просто - попробуйте подход, который @Abe заметил

Если данные не могут быть представлены в простом окне, у вас есть два пути:

  1. перепишем внешний прок в манере получать только необходимые данные без использования внутренней SP
  2. Передачи только нужных данные через внешние временный или сохранялась стол
    • преимущества темп таблицы - вы можете использовать индексы и не нуждается в т о поддерживать данные, которые уже не нужны
    • преимущества сохраняемой таблицы точно так же, за исключением вы можете более тонко настроить его, загар таблица температуры < но вы должны беспокоиться о табличном cleanul и, таким образом, - нужно ввести что-то вроде сессии ключ и дата истечения и внешней очистка
+0

У меня была временная таблица, но администратор баз данных сказал, что я не могу ее использовать. – DataGirl

Смежные вопросы