SSIS中OLE DB Command的参数顺序由何决定?
SSIS OLE DB Command组件的参数顺序规则
核心规则
OLE DB Command组件的参数顺序完全由SQL语句中问号(?)占位符的出现顺序决定,与数据表的字段定义顺序、数据流中的列排列顺序均无关。参数编号从0开始,按问号在SQL里的先后顺序依次递增。
结合你的示例说明
你创建的数据表DimAppointmentFlags字段顺序为RowIdentifier→AppointmentID→Flag,但你编写的UPDATE语句中,问号的出现顺序是:
- 第一个
?:对应SET [AppointmentID] = ? - 第二个
?:对应SET [Flag] = ? - 第三个
?:对应WHERE [RowIdentifier] = ?
因此参数编号对应关系为:
Param_0→ 第一个问号(关联数据流中的AppointmentID列)Param_1→ 第二个问号(关联数据流中的Flag列)Param_2→ 第三个问号(关联数据流中的RowIdentifier列)
这就是你之前假设表字段顺序对应参数顺序不成立的原因——参数顺序只认SQL里问号的先后。
官方文档核心内容(翻译整理)
官方文档明确指出:OLE DB Command组件的参数是基于SQL命令中占位符的出现顺序进行编号的,每个问号占位符对应一个参数,编号从0开始递增。参数的分配逻辑仅与问号在SQL语句中的位置有关,和目标表的字段结构、数据流列的顺序没有任何关联。
实用验证技巧
为避免参数映射错误,建议编写SQL时添加注释标注占位符对应的参数编号:
UPDATE [dbo].[DimAppointmentFlags] SET [AppointmentID] = ? -- Param_0: 对应AppointmentID列 , [Flag] = ? -- Param_1: 对应Flag列 WHERE [RowIdentifier] = ? -- Param_2: 对应RowIdentifier列
在参数映射界面,可通过Parameter Name(如Param_0)匹配注释中的编号,再关联数据流的对应列。
内容的提问来源于stack exchange,提问作者AbsentGaijin
相关产品推荐
相关产品推荐

