SSIS, передавая параметр в команду SQL с ODBC - PullRequest
0 голосов
/ 30 мая 2018

Я пытаюсь запустить переменную в SQL-команде построителя выражений для OBDC.

Выражение выглядит следующим образом:

"SELECT Date(Curdate())                   AS 'Load Date', 
       Sum(CASE 
             WHEN pomstatus = 'TBR' 
                  AND Date(portdate) < Curdate() THEN 1 
             ELSE 0 
           END)                          AS 'Total Removes', 
            Min(CASE 
                         WHEN pomstatus = 'TBR' THEN portdate 
                         ELSE 'N/A' 
                       END) AS 'Oldest Removes', 
       Sum(CASE 
             WHEN pomstatus = 'TBR' 
                  AND Date(portdate) < Curdate() 
                  AND Date(portdate) > Subdate(Curdate(),  @[User::Days] )THEN 1 
             ELSE 0 
           END)                          AS 'Total New Removes', 
       Sum(CASE 
             WHEN pomstatus = 'TBR' 
                  AND acctype = 'b' 
                  AND Date(portdate) < Curdate() THEN 1 
             ELSE 0 
           END)                          AS 'SOHO Removes', 
       Sum(CASE 
             WHEN pomstatus = 'C-U' 
                  AND Date(dd) < Curdate() THEN 1 
             ELSE 0 
           END)                          AS 'Total Confirmed U', 
            Min(CASE 
                         WHEN pomstatus = 'C-U' THEN dd 
                         ELSE 'N/A' 
                       END) AS 'Oldest Confirmed U', 
       Sum(CASE 
             WHEN pomstatus = 'C-U' 
                  AND discoservice LIKE '%s%' 
                  AND Date(dd) < Curdate()THEN 1 
             ELSE 0 
           END)                          AS 'Total Confirmed Satellite', 
            Min(CASE 
                         WHEN pomstatus = 'C-U' 
                              AND discoservice LIKE '%s%' THEN dd 
                         ELSE 'N/A' 
                       END) AS 'Oldest Confirmed Satellite', 
       Sum(CASE 
             WHEN pomstatus = 'C-U' 
                  AND Date(dd) < Curdate() 
                  AND Date(dd) > Subdate(Curdate(),   @[User::Days] ) THEN 1 
             ELSE 0 
           END)                          AS 'Total New Confirmed U', 
       Sum(CASE 
             WHEN pomstatus = 'pwo' THEN 1 
             ELSE 0 
           END)                          AS 'Total Pending WO', 
       Sum(CASE 
             WHEN pomstatus = 'etbr' THEN 1 
             ELSE 0 
           END)                          AS 'Total Escalated TBR', 
       Sum(CASE 
             WHEN pomstatus = 'wtnr' THEN 1 
             ELSE 0 
           END)                          AS 'Total Waiting TNR' 
FROM   POM.mainorders 
WHERE  acctype <> 'c';"

Я получаю следующую ошибку:

Ошибка всплывающего окна

Error popup

Я протестировал тот же сценарий, но заменил 2 переменные числом 2, и он был успешным,так что я знаю, что сам скрипт работает.Мне кажется, что переменная не проходит должным образом.

Что касается того, как я заполняю переменную, переменная заполняется из задачи выполнения SQL, показанной ниже:

ВыполнитьЗадача SQL

Execute SQL task


Выполнение задачи SQL

Execute SQL Task


Результат построителя запросов

Query Builder Result

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Это не так, как параметры работают с задачей «Выполнение SQL».

Либо вы используете конкатенацию строк, как подсказывает @KeithL, либо правильно отображаете переменные (@ [User :: Days]) в параметры (зависит от вашего провайдера -либо маркер ? на основе порядкового номера, либо именованный параметр @myvalue)

Поскольку ваш провайдер указывает OLE DB, вам нужно будет использовать ? в качестве заполнителя, и тогда он станет порядковой системой на основе 0,Нажмите «Сопоставление параметров», имя параметра - 0, а переменная - @[User::Days]

См. Также Books OnLine - Сопоставление параметров запроса с переменными в задаче «Выполнение SQL»

0 голосов
/ 30 мая 2018

Он не распознает переменную внутри строки

, попробуйте объединить строку с этим:

Subdate(Curdate(), "+ @[User::Days] + " )

Лично я бы создал хранимую процедуру в базе данных и передал бы двапараметры, но не у всех есть доступ для этого.

...