Конфигурация переменной пакета служб SSIS - PullRequest
0 голосов
/ 21 марта 2019

У меня есть пакет служб SSIS, который запускается ежедневно и выполняет запрос к базе данных Oracle. Этот запрос выполняется только для вновь добавленных записей, таких как:

select t1.* 
from info_table t1,
     dates_table t2 
where t1.date = (select t2.date from dates_table where (select max(id) from dates_table))

Иногда необходимо выполнить тот же пакет за предыдущую дату, а сейчас мне нужно сохранить 2 пакета. Первые берут дату из запроса, а вторые напрямую через файл конфигурации. Есть ли способ (возможно, путем создания более сложного файла конфигурации) выполнить тот же пакет в зависимости от моих потребностей?

Большое спасибо

1 Ответ

0 голосов
/ 21 марта 2019

Есть ли способ (возможно, путем создания более сложного файла конфигурации) выполнить тот же пакет в зависимости от моих потребностей?

Не легко. Самый простой (это относительный BTW) будет иметь контрольную таблицу для таблицы для выбора даты от, а затем вы просто манипулируете этой таблицей таким образом, что SELECT будет захватывать. Это также требует повторного факторинга запроса SELECT, чтобы отказаться от SELECTing MAX (DATE). Если вам нужна таблица дат для хранения исторических дат, вам нужно будет добавить еще один столбец, который действует как переключатель для указания того, какую дату загружать, а затем упорядочивать по возрастанию DATE. Например:

ID         DateLoadInd
3/21/2019  1 -- this will load
3/20/2019  0 -- this will not load
3/19/2019  0 -- this will not load
3/18/2019  0 -- this will not load
3/17/2019  1 -- this will load 

SELECT T1.*
FROM Info_Table T1
INNER JOIN Date_Table T2
ON T1.Date = T2.ID
WHERE T2.DateLoadInd = 1
ORDER BY T2.ID ASC

Кроме того, вы можете отказаться от присоединения к Date_Table и просто параметризовать запрос, чтобы получить значение через параметр пакета, который сопоставлен с переменной. Мне не нравится этот подход, потому что он требует, чтобы SQL Server определял и передавал дату на работу. Я не думаю, что можно использовать функцию GETDATE () в параметре пакета в надежде, что она будет выполнена для определения даты (то есть она передается только в виде строки). Таким образом, вы не можете использовать подход, позволяющий заданию запускаться автоматически, в надежде, что вы можете просто запустить его на текущую дату, если не хотите переопределить и указать конкретную дату. Даже если это сработало, вы все равно должны были бы не забыть перевернуть параметр пакета обратно в GETDATE () - это больше работы, чем стоит, и поэтому мне не нравится это в отношении создания более сложной конфигурации файл.

На этой ноте, когда вы говорите:

(возможно, путем создания более сложного конфигурационного файла)

Я понимаю, что, говоря о том, что вы используете устаревшую модель развертывания пакетов вместо более современной (и лучшей IMHO) модели развертывания проекта.

...