2015-11-07 3 views
0

Я не смог найти прямой ответ на этот вопрос. Я пытаюсь выполнить пакет SSIS, для которого требуются переменные, поэтому мне нужно передать эти переменные в SSIS через SQL Job. Я знаю, что это возможно на вкладке «Установить значения», но мне нужно передать текущую дату, поэтому жесткое кодирование строки не будет работать.Можете ли вы передать GETDATE() в SQL-задание, которое запускает пакеты SSIS (Set Values)

Возможно ли передать GETDATE() или другие выражения в поле Value в пределах значений Set? Другими словами, получает ли поле «Значение» во время выполнения?

Если это невозможно, было бы хорошим решением передать текущий день из задания SQL в соответствующий параметр в пакете SSIS?

+0

Может ли пакет SSIS не просто разрабатывать текущую дату для себя? –

+0

Да ... это был плохой пример. В более общем смысле, может ли «Задать значения» оценивать утверждения, переданные в них, или это должны быть жестко закодированные строки/ints? – Solaxun

ответ

0

Когда задание запускает пакет SSIS, передаваемые параметры должны быть жестко закодированы в задании.

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

2

К сожалению, нет. Невозможно назначить метод, такой как GETDATE(), для свойства value переменной datetime через экран Set Values ​​задания SQL Agent. Значения полей должны быть установлены на дискретные значения.

Я могу придумать два пути.

Первый и самый простой вариант - это редактирование пакета. Откройте пакет с BIDS/SSDT, найдите эту переменную и установите для свойства «Оценить как выражение» эту переменную значение True. Затем в окне свойств этой переменной щелкните Эллипсис выражения ... и установите Expression равным GETDATE(). Сохраните пакет. Когда пакет запускается, эта переменная будет оцениваться с помощью GETDATE().

Второй способ занимает немного больше пота и имеет риски, но позволяет динамически устанавливать переменные пакета SSIS. Вместо использования SQL Server Job для вызова пакета. Запланированное задание, которое вызывает SP. Затем этот SP выполнит пакет SSIS, используя xp_cmdShell и инструмент командной строки DTEXEC.exe. Адрес example. Инструмент командной строки DTEXEC.EXE имеет аргумент/SET, который в основном делает то же самое, что и диалоговое окно «Установить значения». Но таким образом его динамика. Внутри SP вы можете

DECLARE @MyDate datetime 
SET @MyDate = GETDATE() 

Вам просто нужно получить значение @MyDate над к/SET аргумент DTExec.
Кроме того, вместо GETDATE() у вас также может быть параметр, который позволяет вам построить эту переменную date в командной строке из комбинации подстрок переменных окружения% DATE% и% TIME%.

set MyDate=%DATE:~10,4%-%DATE:~7,2%-%DATE:~4,2% %TIME:~0,8%  
dtexec /FILE "\"D:\SSIS\Package1.dtsx\"" /SET "\"\Package.Variables[VarDateTime].Value\"";"\"%MyDate%\"" 

Примером этого является более here.

Очевидно, что вариант один проще и менее рискован. Удачи!