3

我有一个 DTSX 文件,该文件有一个更新语句,该语句在更新语句中从自身中选择,并且正在填充临时数据库。它对更新语句中的变量使用参数映射。

我将其重写为首先将 select 语句运行到临时表中,然后运行 ​​update 语句,但我收到以下错误“多步 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

这是完整的错误消息:

构建事实(2019 年 8 月 30 日晚上 10:40:25)

消息:ExecutionID:失败代码 #-4001Source:更新 stg_fct_carrierfi​​nancial 子组件中废弃的暗键:执行 SQL 任务错误代码:-1073548784 描述:执行查询“

select cafi_key, newfrequency.fr_key as cafi_...”失败并出现以下错误:“多步 OLE DB 操作生成错误。检查每个 OLE DB 状态值(如果可用)。未完成任何工作。”。可能的失败原因:查询有问题、“ResultSet”属性设置不正确、参数设置不正确或连接未正确建立。

来源:更新 stg_fct_startstoprestarttrans 子组件中的废弃键:执行 SQL 任务错误代码:-1073548784 描述:执行查询“

select stsprstr_key, newfrequency.fr_key as s...”失败,出现以下错误:“多步 OLE DB 操作生成错误。检查每个 OLE DB 状态值(如果可用)。未完成任何工作。”。可能的失败原因:查询有问题、“ResultSet”属性设置不正确、参数设置不正确或连接未正确建立。

经过时间:7800 秒经过时间:02:09:59 返回代码:-4001 (SSIS_EXECUTE_FAILURE)

4

1 回答 1

1

我认为主要问题是由别名引起的,因为您在 FROM 子句中给出currentdata了别名stg_fct_carrierfinancial,但您没有在 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
于 2019-09-02T17:14:44.793 回答