1

Я хочу обновить таблицу, используя пакет SSIS, каждый раз, когда пользователь запускает отчет, построенный из построителя отчетов 3.0, поэтому я создал задание SSIS и вызываю sp_start_job из построителя отчетов в качестве хранимой процедуры для вызова этого задания.Как обеспечить сохранение хранимых процедур перед созданием набора данных в построителе отчетов 3.0?

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

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

Edit: Так что я решил попробовать позвонить работу и ждать до SELECT заявления, как это:

USE msdb; 

EXECUTE dbo.sp_start_job N'CUBE - IS Inventory Report Refresh' 

WAITFOR DELAY '00:00:25' 

USE OtherDatabase; 

SELECT ... 

но метка времени все еще показывает старую дату. Задание SSIS выполняется за 17 секунд (из журналов истории), поэтому ждать 25 секунд, прежде чем я выберу из таблицы, должно быть много ... кто-нибудь знает, почему это происходит?

При запуске запроса в Management Studio, таблица возвращается показывает правильную метку времени, поэтому я думаю, что это может быть проблемой Report Builder (?)

ответ

1

И что бы ожидать. Запуск задания - это асинхронный вызов, поэтому после его запуска управление возвращается обратно вызывающему абоненту. Затем вам нужно будет начать опрос таблиц заданий sys, чтобы узнать, выполняется ли задание в настоящий момент. Вы можете сделать это в одном и том же proc-вызове и после того, как задание достигло состояния терминала (завершено, не удалось), вы можете вернуть свой набор данных пользователю. Это ответит на ваш вопрос, но добро, что может стать уродливым.

Невозможно ли использовать ETL перед людьми, использующими отчет?

+0

Пользователям нужен способ получить обновленные данные из списка SharePoint, из которого основан отчет. Из-за сложности отчета и из-за того, что я слышал, что это не очень хорошая практика, касаться непосредственно таблиц SharePoint, я решил, что лучший способ сделать это - импортировать его в таблицу и сделать некоторую магию T-SQL для массаж данных. – confusedKid

+0

Не уверен, что я действительно хочу опросить таблицы рабочих столов, но из любопытства, как бы вы это сделали в построителе отчетов? – confusedKid

+0

Мое предположение о том, как вы реализовали это процесс, который запускает задание агента, также возвращает данные пользователю? Учитывая это предположение, это будет цикл while между шагом 'EXECUTE msdb.dbo.sp_start_job somejob' и оператором select, который фактически возвращает данные. – billinkc