Использование параметров в разных точках внутри каждого контейнера цикла - PullRequest
0 голосов
/ 16 февраля 2019

У меня есть следующие шаги в потоке управления, где WorkOrderID используется первой задачей «Выполнение SQL», а InvoiceID используется второй задачей сценария.

Может ли кто-нибудь определить, что я делаю неправильно, как показано нижепроисходит сбой в объекте «Обновление статуса счета»?

[Задача «Выполнение SQL») Ошибка: не удалось выполнить запрос «Обновление I установлено I.Status = CASE WHEN C1.Name = 'Cy ..."следующая ошибка: «Многошаговая операция OLE DB вызвала ошибки. Проверьте каждое значение состояния OLE DB, если оно доступно. Никакой работы не было сделано».Возможные причины сбоя: проблемы с запросом, неправильно задано свойство ResultSet, неправильно заданы параметры или неправильно установлено соединение.

и запрос для объекта «Состояние обновленного счета»:

Update
    I
 Set
    I.Status = 10
from
    Invoice I 
where 
    I.ID  = ?

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

1 Ответ

0 голосов
/ 16 февраля 2019

Проверка типов данных и имен параметров / порядка

Я думаю, что ошибка вызвана типом данных Variable.Убедитесь, что User::WorkerID имеет тип VARCHAR, хотя оно должно быть целым числом.Убедитесь, что тип данных переменной относится к столбцу.

На основе следующей статьи Устранение ошибки SSIS из-за неверно сопоставленных параметров :

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

Кроме того, почему имя параметра InvoiceID 1 вместо 0?Попробуйте изменить его на 0


Обходной путь

Вы можете использовать выражение для построения оператора SQL, если у вас все еще есть проблемы с параметрами:

GoВыражение в редакторе Execute SQL Task.Выберите свойство SQLStatmentSource и напишите аналогичное выражение:

"Update
    I
Set
    I.Status = 10
from
    Invoice I 
where 
    I.ID  = " + (DT_WSTR,50)@[User::InvoiceID]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...