SSIS文件系统任务错误:分配给变量的值的类型...与当前变量类型不同

The*_*DBA 3 ssis sql-server-2008-r2

好的...我有一个相对简单的SSIS包(DTSDesigner100,Visual Studio 2008版本9.0.30729.4462 QFE,.NET Framework 3.5 SP1)。包的SSIS控制流最后是一个文件系统任务,它是一个重命名文件操作。

此文件系统任务的属性如下:

  • IsDetinationPathVariable:正确
  • DestinationVariable:用户:: OutputFileName
  • OverwriteDestination:正确
  • 说明:文件系统任务
  • 操作:重命名文件
  • IsSourcePathVariable:否
  • SourceConnection:Excel模板复制目标

没有定义的表达式。如您所见,我将Destination分配为变量User :: OutputFileName。因此,让我们看一下该变量...

  • 名称:OutputFileName
  • 适用范围:包装
  • 数据类型(ValueType):字符串
  • 值:
  • 命名空间:用户
  • EvaluateAsExpression:正确
  • 只读:错误
  • 表达式:(见下文)

"\\\\SERVER\\Folder\\" + "MyAwesomeExcelWorkbook_"
+ (DT_WSTR,4)DATEPART("year", GETDATE())+ "-"
+ RIGHT("0" + (DT_WSTR,2)DATEPART("mm", GETDATE()), 2) + "-"
+ RIGHT("0" + (DT_WSTR,2)DATEPART("dd", GETDATE()), 2) + "-"
+ RIGHT("0" + (DT_WSTR,2)DATEPART("hh", GETDATE()), 2) + "-"
+ RIGHT("0" + (DT_WSTR,2)DATEPART("mi", GETDATE()), 2) + "-"
+ RIGHT("0" + (DT_WSTR,2)DATEPART("ss", GETDATE()), 2)
+ ".xlsx"
Run Code Online (Sandbox Code Playgroud)

因此,我可以成功评估此表达式。每次程序包运行(失败)时,其值就是所期望的表达式的值。

当我运行程序包时,会发生以下情况...

  1. 前面的步骤成功运行。
  2. 文件系统任务启动,并且文件已成功重命名。
  3. 但是,由于文件系统任务失败并出现以下错误,因此该包现在失败了:

Error: 0xC001F009 at Package: The type of the value being assigned to variable "User::OutputFileName" differs from the current variable type. Variables may not change type during execution. Variable types are strict, except for variables of type Object.
Task failed: Rename Excel Workbook
Error: 0xC0019001 at Rename Excel Workbook: The wrapper was unable to set the value of the variable specified in the ExecutionValueVariable property.
Warning: 0x80019002 at Package: SSIS Warning Code DTS_W_MAXIMUMERRORCOUNTREACHED.  The Execution method succeeded, but the number of errors raised (4) reached the maximum allowed (1); resulting in failure. This occurs when the number of errors reaches the number specified in MaximumErrorCount. Change the MaximumErrorCount or fix the errors.
SSIS package "Package.dtsx" finished: Failure.
Run Code Online (Sandbox Code Playgroud)

显然有一些小细节我在这里忘记了。现在,我尝试将整个表达式转换为DT_WSTR,512 -评估结果还不错,但是文件系统任务仍然会失败,并出现相同的错误。

有人可以指出我所忽略的细节吗?提前致谢。

小智 6

我也遇到了同样的错误。我正在使用“执行SQL任务”来运行存储过程,从中使用单行结果集值来设置SSIS包变量。存储过程中的变量声明为“ varchar(max)”,我将它们分配给定义为“字符串”的程序包级变量。

因此,我尝试将存储过程声明更改为varchar(512)和“ VOILA” ...没有更多错误。实际上...它还可以与varchar(8000)和nvarchar(4000)一起使用...但是SSIS不太像varchar(max)。