【发布时间】:2019-01-24 22:21:20
【问题描述】:
我在SSIS package name User::FileFullPathLDR 中有变量。
在 SSIS 包运行时从这个变量中,我想从 FileFullPathLDR 中提取文件名并将其放入另一个名为 User::FileName 的变量中。
我已经尝试了所有类型的组合来尝试让此代码在 Expression Builder 中解析以解决,除了站在我的头上烧香说 OM 400 万次,似乎没有任何效果。
我在表达式生成器中为变量 User::FileName: 放入以下表达式
REVERSE(SUBSTRING(REVERSE(@[User::FileFullPathLDR]),1,FINDSTRING(REVERSE(@[User::FileFullPathLDR] ),"\\",1)-1))
我希望从完整路径中获得类似于:LDRFile01242019.txt. 的文件名
但当表达式生成器解析此语句时,我不断收到以下错误:
长度 -1 对函数“子字符串”无效。长度参数不能为负数。将长度参数更改为零或正值。
【问题讨论】:
-
更多信息:我在参数窗口中单击变量 FileName 最右侧的 Expression Builder。
-
-1 被评估为负一,但目的是将其评估为负一。如何让表达式生成器将其视为负 1 而不是负 1。
-
减一和负一是一回事。在这种模式中,当
FINDSTRING部分找不到任何内容并返回 0 时,就会发生该错误。首先仅评估FINDSTRING位并确认它没有返回 0。不要尝试调试大型内联表达式一口气。验证其中的一部分并构建它们。 -
如果你正在做很多时髦的路径/文件的东西,可能值得在脚本任务中使用更友好的方法来做
-
感谢 Nick.McDemaid,我已经验证了各个部分,如果 -1 不存在,我现在会返回 \LDR01102019.txt 的文件名。我想我要继续做一个脚本任务,因为这个解析器不允许我返回 FINDSTRING(REVERSE(@[User::FileFullPathLDR] ),"\\",1)-1) 作为一个整数对于 Substring 长度参数,而是将 -1 视为 Substring 函数的最终无效参数。
标签: sql-server ssis visual-studio-2017 expression etl