SSIS 使用参数映射执行 SQL 任务多步骤



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

我重写了它以首先将 select 语句运行到临时表中,然后运行更新语句,但我收到以下错误"多步 OLE DB 操作生成错误...">

我对 SSIS 包不是很熟悉,想知道我是否写错了语句。

下面是查询。 请注意,底部的 update 语句中包含"?",我认为这会将参数映射到它。

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

以下是完整的错误消息:

构建事实 (8/30/2019 10:40:25 PM(

消息:执行 ID:失败代码 #-4001来源:更新强迫症变暗 stg_fct_carrierfinancial子组件中的键:执行 SQL 任务 错误代码:-1073548784 描述:正在执行查询">

选择"cafi_key",newfrequency.fr_key为"cafi_..."失败,并显示 以下错误:"多步骤 OLE DB 操作生成错误。 检查每个 OLE DB 状态值(如果可用(。没有做任何工作。 可能的失败原因:查询"结果集"出现问题 属性设置不正确,参数设置不正确,或 连接未正确建立。

来源:更新stg_fct_startstoprestarttrans中的固定密钥 子组件:执行 SQL 任务错误代码:-1073548784 说明: 正在执行查询">

选择"stsprstr_key",newfrequency.fr_key为 s...,失败,并显示 以下错误:"多步骤 OLE DB 操作生成错误。 检查每个 OLE DB 状态值(如果可用(。没有做任何工作。 可能的失败原因:查询"结果集"出现问题 属性设置不正确,参数设置不正确,或 连接未正确建立。

运行时间:7800 秒 运行时间:02:09:59 返回代码:-4001 (SSIS_EXECUTE_FAILURE(

我认为主要问题是由别名引起的,因为您在 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

最新更新