3

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

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

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

当我运行包时,我收到以下错误:

[执行 SQL 任务] 错误:执行查询“EXEC GetCurrentDate @CurrentDate=?”失败,出现以下错误:“分配给变量“User::CurrentDate”的值的类型与当前变量类型不同。变量可能不在执行期间更改类型。变量类型是严格的,除了 Object 类型的变量。“。可能的失败原因:查询有问题,“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?

谢谢

4

2 回答 2

3

在 Micorsoft Connect 错误报告中找到了答案:

我们将关闭此案例,因为这是预期的行为,并且是新的 sql 日期时间类型更改的结果。您正在为 sql 任务使用本机 oledb 连接管理器,在 COM 互操作过程中,我们使用 VARIANT 来保存值,防止数据丢失的唯一方法是将值存储为 BSTR 变体。如果您将 User::dateParam 更改为 String 类型,它将起作用,或者您可以切换到使用托管连接管理器来绕过 COM 互操作。

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

于 2009-05-18T12:48:38.527 回答
0

尝试指定 inout/output 参数,DATE而不是DBTIMESTAMP在 SSIS 任务中。

这当然适用于我研究过的 SSIS 2005 包。

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

于 2009-05-18T10:51:06.017 回答