SSIS传递datetime类型变量到存储过程报错问题求助
SSIS存储过程传参datetime类型报错排查方案
- 首先修正SSIS侧变量类型:将名为
time的变量数据类型设置为DateTime(不要选择Date、Time这类拆分存储的类型),从根源避免类型映射匹配错误。SSIS中日期的显示格式为MM/DD/YYYY仅为界面展示规则,变量本身是结构化存储的,和实际环境使用的YYYY/MM/DD格式无关,无需做显示格式的额外调整。 - 调整第一个执行SQL任务的输出参数配置:对应输出
bookmark值的参数映射项,数据类型强制选择DBTIMESTAMP,如果使用OLE DB连接管理器需要确认参数序数和存储过程参数顺序一致,使用ADO.NET连接则需要参数名和存储过程定义的输出参数名完全匹配。 - 修正第二个执行SQL任务的入参配置:
@bookmark对应的变量time的参数映射项,数据类型统一选择DBTIMESTAMP,参数方向设置为Input,确认参数序数/参数名和SQL语句中的问号占位顺序匹配。 - 临时兼容方案:如果上述调整后仍报错,可以将变量转成标准日期字符串传递,将第二个存储过程的执行语句修改为:
同时将第三个问号对应的exec MyProcedure2 @var1 = ?, @var2 = ?, @bookmark = CONVERT(datetime, ?, 111)time变量映射的数据类型改为STRING,长度设置为20即可,其中111是SQL Server对应YYYY/MM/DD格式的转换编码,适配你环境的日期格式要求。
你直接在SQL Server端调用存储过程正常的原因是本地调用时参数为原生datetime类型,无需跨进程做OLE DB/ODBC类型映射,不会出现类型不兼容的问题。
内容的提问来源于stack exchange,提问作者Radek Gąska
相关产品推荐
相关产品推荐

