Многоэтапное выполнение задачи SSIS SQL с сопоставлением параметров

У меня есть файл DTSX с оператором обновления, который выбирает сам себя в операторе обновления и заполняет временную БД. Он использует сопоставление параметров для переменной в операторе обновления.

Я переписал его, чтобы сначала выполнить оператор select во временной таблице, а затем запустить оператор обновления, но я получаю следующую ошибку: «Многоэтапная операция OLE DB сгенерировала ошибки ...»

Я не очень хорошо знаком с пакетами SSIS, и мне интересно, неправильно ли я написал заявление.

Ниже приведен запрос. Обратите внимание, что оператор обновления внизу имеет «?» в нем, который, как я думал, сопоставит с ним параметр.

if OBJECT_ID(N'tempdb..#QUERYCF') is not null
  drop table #QUERYCF
go

select
        cafi_key,
        newfrequency.fr_key as cafi_freqkey,
        newcarriercharge.cacr_key as cafi_carrierchargekey,
        newcarrierrate.cara_key as cafi_carrierratekey
INTO #QUERYCF
    from stg_fct_carrierfinancial
    left outer join fin_dim_date chargedate
        on cafi_chargedtkey = chargedate.dt_key

    inner join fin_dim_carriercharge currentcarriercharge
        on cafi_carrierchargekey = currentcarriercharge.cacr_key
    inner join lkp_dim_carriercharge newcarriercharge
        on currentcarriercharge.cacr_db_code = newcarriercharge.cacr_db_code
        and currentcarriercharge.cacr_code = newcarriercharge.cacr_code
        and chargedate.dt_epochday between newcarriercharge.cacr_stdt_epochday and newcarriercharge.cacr_endt_epochday

    inner join fin_dim_frequency currentfrequency
        on cafi_freqkey = currentfrequency.fr_key
    inner join lkp_dim_frequency newfrequency
        on currentfrequency.fr_db_code = newfrequency.fr_db_code
        and currentfrequency.fr_pu_code = newfrequency.fr_pu_code
        and currentfrequency.fr_code = newfrequency.fr_code
        and chargedate.dt_epochday between newfrequency.fr_stdt_epochday and newfrequency.fr_endt_epochday

    inner join fin_dim_carrierrate currentcarrierrate
        on cafi_carrierratekey = currentcarrierrate.cara_key
    inner join lkp_dim_carrierrate newcarrierrate
        on currentcarrierrate.cara_db_code = newcarrierrate.cara_db_code
        and currentcarrierrate.cara_code = newcarrierrate.cara_code
        and chargedate.dt_epochday between newcarrierrate.cara_stdt_epochday and newcarrierrate.cara_endt_epochday

    where cafi_deleteloadkey is null and
    (
        currentcarriercharge.cacr_mostrecentcode = 0 or
        currentfrequency.fr_mostrecentcode = 0
    )

GO



update stg_fct_carrierfinancial
    set cafi_freqkey = newdata.cafi_freqkey,
    cafi_carrierchargekey = newdata.cafi_carrierchargekey,
    cafi_carrierratekey = newdata.cafi_carrierratekey,
    cafi_modifyloadkey = ?
from stg_fct_carrierfinancial currentdata
inner join (select
        cafi_key,
        cafi_freqkey,
        cafi_carrierchargekey,
        cafi_carrierratekey
FROM #QUERYCF
) newdata
on currentdata.cafi_key = newdata.cafi_key

GO

drop table #QUERYCF
GO

Вот полное сообщение об ошибке:

Факты о сборке (30 августа 2019 г., 22:40:25)

Сообщение: ExecutionID: Код ошибки #-4001Источник: Обновите устаревшие тусклые ключи в stg_fct_carrierfinancial Подкомпонент: Выполнение задачи SQL Код ошибки: -1073548784 Описание: Выполнение запроса "

выберите cafi_key, newfrequency.fr_key as cafi_..." не удалось со следующей ошибкой: "Многоэтапная операция OLE DB вызвала ошибки. Проверьте каждое значение состояния OLE DB, если оно доступно. Никакая работа не была выполнена.». Возможные причины сбоя: Проблемы с запросом, свойство «ResultSet» задано неправильно, параметры заданы неправильно или соединение установлено неправильно.

Источник: Обновление устаревших ключей в stg_fct_startstoprestarttrans Подкомпонент: Выполнение задачи SQL Код ошибки: -1073548784 Описание: Выполнение запроса "

выбрать stsprstr_key, newfrequency.fr_key as s..." не удалось со следующей ошибкой: "Многоэтапная операция OLE DB вызвала ошибки. Проверьте каждое значение состояния OLE DB, если оно доступно. Никакая работа не была выполнена.». Возможные причины сбоя: Проблемы с запросом, свойство «ResultSet» задано неправильно, параметры заданы неправильно или соединение установлено неправильно.

Истекшее время: 7800 секунд Истекшее время: 02:09:59 Код возврата: -4001 (SSIS_EXECUTE_FAILURE)


person markmccoid    schedule 02.09.2019    source источник


Ответы (1)


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

Попробуйте использовать следующий запрос:

update currentdata
    set currentdata.cafi_freqkey = newdata.cafi_freqkey,
    currentdata.cafi_carrierchargekey = newdata.cafi_carrierchargekey,
    currentdata.cafi_carrierratekey = newdata.cafi_carrierratekey,
    currentdata.cafi_modifyloadkey = ?
from stg_fct_carrierfinancial currentdata 
inner join (select
        cafi_key,
        cafi_freqkey,
        cafi_carrierchargekey,
        cafi_carrierratekey
FROM #QUERYCF
) newdata
on currentdata.cafi_key = newdata.cafi_key

GO
person Hadi    schedule 02.09.2019
comment
Спасибо. Я внес изменения, но ошибка по-прежнему возникает, но ошибка, похоже, связана с временной таблицей SELECT... INTO #QUERYCF. Видите ли вы какие-либо проблемы с запуском SELECT в задаче «Выполнение SQL» в службах SSIS? - person markmccoid; 03.09.2019
comment
@markmccoid не использует столбцы без упоминания псевдонима таблицы или имени таблицы (если псевдоним не указан). также при присвоении псевдонима таблице никогда больше не используйте его имя (всегда используйте псевдоним) - person Hadi; 03.09.2019