Источник OLE DB в проблеме потока данных с переменной - PullRequest
2 голосов
/ 18 апреля 2019

При попытке вызвать процедуру в исходной задаче OLE DB у меня возникает неприятная проблема.Я использую команду SQL из режима доступа к переменным данным, но я вижу, что она не оценивает мою переменную правильно.

Моя переменная (для ValidateAsExpression установлено значение True) использует выражение для создания команды sql, например«EXEC ProcName« Param », где значение Param исходит из переменной, значение которой я установил с помощью задачи EXEC SQL.Ниже приведено выражение:

“EXEC ProcName ” + “‘” + @[User::vDateThreshold] + “‘”

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

Кто-нибудь еще сталкивался с этой проблемой?

Я использую этот метод, потому что у меня была похожая проблема при попытке использовать параметр с методом доступа к данным команды sql.

Заранее спасибо

Ответы [ 3 ]

2 голосов
/ 18 апреля 2019

Я использую этот метод, потому что у меня была похожая проблема при попытке использовать параметр с методом доступа к данным команды sql.

Правильный способ сделать этоиспользуя команду SQL с параметрами:

EXEC ProcName ?

и выберите @[User::vDateThreshold] в качестве параметра.

Если он не работает, проверьте код процедуры и убедитесь, что он генерирует определенный набор результатов.Если результирующий набор является динамическим, а столбцы не являются фиксированными, его необходимо определить в запросе с помощью ключевого слова WITH RESULTSETS.

0 голосов
/ 23 апреля 2019

Спасибо за ответы на мой вопрос.

На самом деле я обнаружил, что проблема была в заказе моих задач в пакете.Когда я посмотрел поближе на значения, назначенные соответствующим переменным с помощью точки останова в моей задаче exec SQL, я увидел, что неверная дата была передана моему процессу.Когда я установил значение vDateThreshold на более ранней точке, было назначено правильное значение даты.

Я думаю, что это был случай, когда я смотрел на что-то достаточно долго, и я упускал очевидное.

0 голосов
/ 18 апреля 2019

Из названия @[User::vDateThreshold это похоже на переменную даты и времени SSIS.Попробуйте установить это для переменной с явным приведением и затем выполнить хранимую процедуру с переменной.Убедитесь, что в функции CAST есть одинарные кавычки ('), как если бы это было сделано в SSMS.При объединении переменной datetime в строковой переменной в SSIS переменную datetime необходимо преобразовать в текст, что делается с помощью (DT_STR, length, codepage) в приведенном ниже примере выражения.Я не уверен, какую версию вы используете, но тестирование этого на SSDT для Visual 2017 работало хорошо для меня.Это будет охватывать, если вы все еще хотите хранить SQL в переменной, однако решение, которое разместил @Hadi, является хорошим вариантом, если вы предпочитаете идти по этому пути.

"DECLARE @pDate DATETIME
SET @pDate =  CAST('" + (DT_STR, 50, 1252)@[User::vDateThreshold]  + "' AS DATETIME)
EXEC ProcName @pDate"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...