获取尝试分析表达式失败并返回错误代码0xC00470A6

Getting Attempt to parse the expression failed and returned error code 0xC00470A6

提问人:Mark 提问时间:11/15/2023 更新时间:11/15/2023 访问量:24

问:

我知道可能会抛出此错误的原因多种多样,但我没有发现任何搜索 SO 似乎适用于这种情况。

我有一个无法构建的 SSIS 包,并出现以下错误:

Attempt to parse the expression "Replace(@[$Project::RootDirectory] + "\\files\\in", 
"\\\\","\\")" failed and returned error code 0xC00470A6. 
The expression cannot be parsed. 
It might contain invalid elements or it might not be well-formed. 
There may also be an out-of-memory error.

但是,我可以打开构建失败的表达式,然后单击“评估表达式”,没有任何问题。它工作得很好。

这是 Visual Studio 2017,该公司将其与生产包一起使用,因此无法选择升级版本。

我已经尝试了我能想到的一切来减轻错误,但它仍然存在。

我应该提到的另一点是随后的错误:

The variable "$Project::RootDirectory" was not found in the Variables collection. 
The variable might not exist in the correct scope.      

并且此包是从 SQL 包存储中导出的,用于修改

如果构建似乎试图在后台执行相同的评估并且由于某种原因出现问题,我该如何解决该错误?

SSIS 可视化工作室-2017

评论

0赞 Brad 11/15/2023
不确定这是否会解决问题,但必须使用转义字符不是问题(至少使用 \”。您可以在文本前添加 @,因此请使用 @“\files\..”除非您需要 2 个反斜杠,否则如果没有 @,您应该有 4 个反斜杠来考虑转义字符。所以 “\\\\” = “\\”
1赞 Mark 11/15/2023
我试了一下你的建议,但收到了“表达式@”\files\...“的错误。失败。无法识别标记“@”。无法解析表达式,因为它包含无效元素。所以我想VS2017不会像你建议的那样允许这样做。

答:

1赞 billinkc 11/15/2023 #1

并且此包是从 SQL 包存储中导出的,用于修改

这是你的吸烟枪。可能。

包和项目变量仅对项目部署模型包有效。SSIS 包存储区和各种其他名称暗示了旧包部署模型,通常存储在磁盘上,但可能存储在 msdb 中。

假设你下载了部署单元(一个 .ispac 文件),该文件是 SSIS 项目的独立项目文件。它包含重新创建项目所需的一切:清单文件、包、project.params 文件以及任何项目级连接管理器(可选)。

你遇到的是,你打开的 SSIS 项目找不到对项目参数“你是如何达到这一点的”的引用,这是未知的。分辨率可能取决于我们如何达到这一点,但我首先会添加一个项目参数$Project::RootDirectoryRootDirectory

enter image description here

然后你的表达式至少会解析。如果值为空,则如下所示

enter image description here

如果这解决了问题,那么问题就是将其部署回其所属的位置。project.params 文件需要在包中移动,否则,执行将失败,并可能出现类似的错误,因为执行引擎没有对项目参数的引用。

评论

0赞 Mark 11/16/2023
谢谢!我确实添加了该项目作为在帖子之前解决问题的努力,但它没有解决它。但是,您的解释是有道理的,鉴于您分享的额外知识,我相信我可以解决这个问题。👍