【问题标题】:How to get part of file name parsed to the columnns in SSIS如何将部分文件名解析为 SSIS 中的列
【发布时间】:2015-07-28 04:25:04
【问题描述】:

尝试使用这个:

substring(@[User::v_Filename],37,3)

但是,似乎 substring 只能处理 20 个字符?

文件名如下所示: D:\Projects\OTS\MYSSA Dashboard\Data\ATL_20150725Text.csv

我想要的只是ATL 部分

但是当ssis移动到下一个文件时,它可能会变成NYCDAL,大约有26个文件需要处理,全部来自不同的区域。

【问题讨论】:

  • 子串没有这个限制。可能是您放置数据的文件存在格式问题。
  • 我没有将数据放入文件中。我想要得到的只是最后一个反斜杠之后的 3 个字符,或者在本例中为第 37 个字符 + 3。在本例中为 ATL。只是试图从派生列中获取该日期到表中。不尝试将数据移动到文件中。
  • 好的,但您是如何得出只支持 20 个字符的结论的?
  • 您确定 [User::v_Filename] 的内容与您在运行时列出的一样吗?也许你可以使用一个脚本组件然后去:system.windows.forms.messagebox.show dts.variables("User::v_filename");确认这一点?
  • 是的。如果我不使用子字符串没有问题,我可以直接导入。如果我使用 substring 并说 substring(@[User::v_filename],17,3) 它会导入,但如果我去 18,3 它只返回两个字符....如果我像 20.3 这样超过 20 我会收到错误我运行它。

标签: sql sql-server-2008 ssis


【解决方案1】:

在没有文件变量的情况下测试子字符串,它在表达式中使用子字符串函数。

示例 - 使用表达式创建一个变量,然后点击“评估”:

substring("ABCDEFGHIJKLMNOPQRSTUVWXYZ", 25, 2)

它会正常工作的。

鉴于 substring 函数工作正常,您的 [User::v_Filename] 变量一定有问题。你确定它设置正确吗?也许您应该尝试在分配文件名后打开调试器并设置断点来运行 BIDS,并验证它确实设置正确。

【讨论】:

  • 该变量有一个硬编码值,但该值会随着包的运行而改变。如果我只想找到第一个下划线 ATL_ 并找到下划线之前的三个字符怎么办?
  • 如果它发生变化,您可以在运行时对其进行监控 - 如果您在循环内部中断,您可以在每次运行之前查看值是什么,然后您可以找到哪个文件抛出错误消息.
猜你喜欢
  • 1970-01-01
  • 2021-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-10
相关资源
最近更新 更多