SSIS: переменная от SQL до задачи потока данных - PullRequest
6 голосов
/ 19 января 2020

Довольно новый для BI и SQL в целом, но через несколько месяцев go Я даже не знал, что такое модель, и сейчас я ... пытаюсь создать пакет, который запускается ежедневно.

В данный момент выполняется Excel через PowerQuery, но из-за того, что данных так много, мне приходится каждый месяц вручную менять запрос. Решил перенести его в SSIS.

Требуемый результат: извлеките последнюю дату из моей базы данных и используйте ее в качестве переменной в модели (так как у меня миллионы строк, я хочу загружать строки только с датами, превышающими те, которые уже есть в моей таблице ).

Вот мой Execute SQL Task: enter image description here enter image description here

Я установил переменную для запроса SQL enter image description here

и пытаюсь использовать его в моем запросе OLE DB следующим образом enter image description here

Execute SQL Task: результаты, все в порядке - возвращает дата как "дд / мм / гггг чч24: ми: сс"

SELECT MAX (CONVACCT_CREATE_DATE) AS Expr1 FROM GOMSDailySales

Variable for OLE DB SQL Query:

"SELECT fin_booking_code, FIN_DEPT_CODE, FIN_ACCT_NO, FIN_PROD_CODE, FIN_PROG_CODE, FIN_OPEN_CODE, DEBIT_AMT, CREDIT_AMT, CURRENCY_CODE, PART_NO, FIN_DOC_NO, CREATE_DATE
FROM cuown.converted_accounts
WHERE (CREATE_DATE > TO_DATE(@[User::GetMaxDate],'yyyy/mm/dd hh24:mi:ss'))
AND (FIN_ACCT_NO LIKE '1%')"

В настоящее время появляется ошибка missing expression, если я добавлю " ' " к мой @[User::GetMaxDate], я получаю year must be between 0 and xxxx ошибку.

Что я делаю не так / есть ли более чистый способ сделать это?

Ответы [ 2 ]

2 голосов
/ 19 января 2020

В источнике OLEDB используйте следующее, измените режим доступа к данным на SQL команду и используйте следующую команду:

SELECT fin_booking_code, FIN_DEPT_CODE, FIN_ACCT_NO, FIN_PROD_CODE, FIN_PROG_CODE, FIN_OPEN_CODE, DEBIT_AMT, CREDIT_AMT, CURRENCY_CODE, PART_NO, FIN_DOC_NO, CREATE_DATE
FROM cuown.converted_accounts
WHERE (CREATE_DATE > TO_DATE(?,'yyyy/mm/dd hh24:mi:ss'))
AND (FIN_ACCT_NO LIKE '1%')

И нажмите кнопку параметров и сопоставьте @[User::GetMaxDate] первому параметру.

Для получения дополнительной информации проверьте следующий ответ: Параметризованный исходный запрос OLEDB

Альтернативный метод

Если параметры не поддерживаются используемым поставщиком OLE DB, создайте переменную типа string и оцените эту переменную как следующее выражение:

"SELECT fin_booking_code, FIN_DEPT_CODE, FIN_ACCT_NO, FIN_PROD_CODE, FIN_PROG_CODE, FIN_OPEN_CODE, DEBIT_AMT, CREDIT_AMT, CURRENCY_CODE, PART_NO, FIN_DOC_NO, CREATE_DATE
FROM cuown.converted_accounts
WHERE CREATE_DATE > TO_DATE('" + (DT_WSTR, 50)@[User::GetMaxDate] +
"' ,'yyyy/mm/dd hh24:mi:ss') AND FIN_ACCT_NO LIKE '1%'"

Затем из источника OLE DB измените режим доступа к данным SQL Команда из переменной и выберите строковую переменную, которую вы создали.

1 голос
/ 19 января 2020

Вы пытаетесь использовать переменную SSIS как переменную в запросе. При построении запроса SQL в строковой переменной вам просто нужно объединить строки вместе. Выражение для вашей строковой переменной запроса должно выглядеть следующим образом.

"SELECT fin_booking_code, FIN_DEPT_CODE, FIN_ACCT_NO, FIN_PROD_CODE, FIN_PROG_CODE, FIN_OPEN_CODE, DEBIT_AMT, CREDIT_AMT, CURRENCY_CODE, PART_NO, FIN_DOC_NO, CREATE_DATE
FROM cuown.converted_accounts
WHERE CREATE_DATE > " + @[User::GetMaxDate] +
"AND (FIN_ACCT_NO LIKE '1%')"
...