首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SSIS文件系统任务错误:分配给变量的值的类型.与当前变量类型不同。

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

Stack Overflow用户
提问于 2012-05-03 18:27:41
回答 6查看 23.7K关注 0票数 3

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

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

  • IsDetinationPathVariable: True
  • DestinationVariable: User::OutputFileName
  • OverwriteDestination: True
  • Description:文件系统Task
  • Operation:重命名file
  • IsSourcePathVariable: False
  • SourceConnection: Excel模板复制目标

没有已定义的表达式。如您所见,我将目标分配为变量用户::OutputFileName。让我们看看这个变量..。

名称: OutputFileName

  • Scope: Package

  • Data Type (ValueType):String

  • Value:

  • 命名空间: User

  • EvaluateAsExpression: True

  • ReadOnly: False

  • Expression:(见下文)

代码语言:javascript
运行
复制
"\\\\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"

所以我可以成功地评估这个表达式。每次包运行(并失败)时,它的值都是求值表达式的值,正如人们所预期的那样。

当我运行这个包裹时,会发生这样的事情.

前面的步骤运行successfully.

  • The文件系统任务启动,并且该文件已成功运行--由于文件系统任务出现以下错误,软件包现在失败了:

代码语言:javascript
运行
复制
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.

显然有一些小细节我在这里忘记了。现在,我尝试将整个表达式转换为一个DT_WSTR,512 --这个表达式的计算结果很好,但是文件系统任务仍然会因为同样的错误而失败。

有人能指出我忽略的细节吗?提前谢谢。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-05-03 18:54:37

问题是变量的作用域是包,而不是任务。

将要将作用域更改为任务的变量将导致成功执行。

编辑:,我想我需要问--为什么?老实说,这不符合我对SSIS的理解--自从我通过每个Denali CTP引入SSIS以来,我就一直使用它。在引擎盖下发生了什么,导致了任务范围内的变量,而不是在文件系统任务中使用的包作用域变量?除了某些任务之外,没有问题,但当我在某些任务中使用它们时,就会出现问题。到底怎么回事?

票数 2
EN

Stack Overflow用户

发布于 2014-07-17 18:46:33

我也遇到了同样的错误。我使用"Execute“来运行存储过程,从存储过程中使用单行结果集值来设置SSIS包变量。存储过程中的变量被声明为"varchar(max)“,我将它们分配给包级变量,这些变量被定义为"string”。

所以我试着把存储过程声明改为varchar(512)和“VOILA”.别再犯错了。实际上..。它还与varchar(8000)和nvarchar(4000)一起工作。但SSIS没有likey varchar(max)。

票数 8
EN

Stack Overflow用户

发布于 2012-05-03 19:30:49

您可能需要检查SSIS包中的“额外”变量。包范围内的变量应该在任务中可用。打开变量窗口,单击“显示所有变量”窗口,查看是否有两个变量--在不同的作用域--名为OutputFileName。

由于变量是在SSIS中以名称标识的,因此在较低范围内的变量(例如包含文件系统任务的序列容器)将有效地拦截包作用域变量的变量标识(如果两个变量命名相同的话):

希望这有帮助,安迪

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10437284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档