我正在尝试使用 SSIS 2008 中的执行 SQL 任务将存储过程输出参数映射到包变量。

包变量是 SSIS 类型 DateTime,存储过程参数是 SQL 类型 DATETIME。

SQL语句是 EXEC GetCurrentDate @CurrentDate=? 在参数映射屏幕中,参数被映射到指定了输出方向和数据类型 DBTIMESTAMP 的包变量。

当我运行该包时,出现以下错误:

[执行SQL任务]错误:执行查询“ exec getCurrentDate @currentdate =?“失败了以下错误:“分配给变量的值的类型”用户:: Current -Date”与当前变量类型不同。执行过程中变量可能不会更改类型。变量类型是严格的,除了类型对象的变量。”。可能的故障原因:查询问题,“ resultset”属性未正确设置,参数未正确设置或连接未正确设置。

如果我对正在运行的查询运行跟踪,我会看到类型被假定为 datetime2:

declare @p3 datetime2(7)
set @p3=NULL
exec sp_executesql N'EXEC GetCurrentDate @CurrentDate=@P1 ',N'@P1 datetime2(7) OUTPUT',@p3 output
select @p3

有谁知道为什么假设类型是 datetime2 ?

谢谢

有帮助吗?

解决方案

找到答案上的Micorsoft连接错误报告:

  

,因为这是预期的行为,并且是新的SQL日期时间类型变化的结果,我们正在关闭这种情况下。您在使用本机OLEDB连接管理器对SQL任务,在COM互操作的过程中,我们使用VARIANT持有价值,并防止数据丢失的唯一方法是存储值作为BSTR的变体。如果更改用户:: dateParam为String类型会工作,或者你可以切换使用托管连接管理器,以绕过COM互操作。

http://connect.microsoft.com/SQLServer/feedback /ViewFeedback.aspx?FeedbackID=307835

其他提示

尝试将输入/输出参数指定为 DATE 而不是 DBTIMESTAMP 在 SSIS 任务中。

这在我开发过的 SSIS 2005 包中确实有效。

也值得一看 这个链接, ,其中涵盖了这个问题以及 SSIS 和日期的其他几个问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top