【问题标题】:Renaming a file source重命名文件源
【发布时间】:2019-05-09 16:04:02
【问题描述】:

我一直在从平面文件源开发 SSIS 包。该文件每天都来,文件名有这样的日期时间指示:

文件名_20190509042908.txt

我想知道如何才能通过日期部分;我希望包动态读取文件,但它应该在没有最后 6 位的情况下通过我只是不需要最后 6 位数字,因为它不一致。

我要传递 Filename_20190509.txt

我已经弄清楚如何在删除时间部分之前获取文件名。因此,我很难让包通过忽略文件扩展名前的最后 6 位来动态读取文件名。

谁能帮我解决这个问题?

【问题讨论】:

  • 你是什么意思你怎么能通过直到日期部分?传递什么,传递到哪里?
  • 您的意思是要删除扩展名前文件名的最后 6 个字符吗?如果是这样,使用什么 SSIS 表达式?
  • 编辑了问题。我希望包动态读取文件。但要这样做,它应该没有最后 6 位数字。
  • 使用带通配符的 Foreach 循环容器?
  • @Larnu 我知道如何获取文件名直到删除时间部分的日期。因此,我很难让包通过忽略文件扩展名前的最后 6 位来动态读取文件名。

标签: sql sql-server ssis etl ssis-2012


【解决方案1】:

从完整文件路径中删除时间部分

假设完整的文件路径存储在名为@[User::FilePath]的变量中

您必须添加一个字符串类型的变量(例如:@[User::Filename]),在数据流任务之前添加一个Expression Task并使用以下表达式:

@[User::Filename] = SUBSTRING(@[User::FilePath], 1, LEN(@[User::FilePath]) - 
FINDSTRING(REVERSE(@[User::FilePath]), "\\", 1)) + "\\" + 
LEFT(TOKEN(@[User::FilePath],"\\",TOKENCOUNT(@[User::FilePath],"\\")),
LEN(TOKEN(@[User::FilePath],"\\",TOKENCOUNT(@[User::FilePath],"\\"))) - 10) + ".txt"

例子:

如果@[User::FilePath]的值为

C:\新建文件夹\1\Filename_20190503001221.txt

那么@[User::Filename] 将是:

C:\新建文件夹\1\Filename_20190503.txt


如果你只有文件名

文件名_20190503001221.txt

而文件夹路径存储在另一个变量中,只需使用以下表达式:

@[User::Filename] = @[User::Folderpath] + "\\" + 
LEFT(TOKEN(@[User::FilePath],"\\",TOKENCOUNT(@[User::FilePath],"\\")),
LEN(TOKEN(@[User::FilePath],"\\",TOKENCOUNT(@[User::FilePath],"\\"))) - 10) + ".txt"

从变量中读取文件源

单击用于读取源文件的平面文件连接管理器,按F4显示属性选项卡,单击表达式属性并将以下表达式分配给connectionstring属性:

@[User::Filename]

现在将 Data Flow Task Delay validation 属性值更改为 True

【讨论】:

    【解决方案2】:

    我必须假设您已经在使用 foreach 循环,因为文件名正在更改,但这里是如何将完全限定名称更改为您想要的名称:

    TOKEN(character_expression, delimiter_string, occurrence)
    

    您的使用情况:

    这将为您提供完整的文件名:

    exp = TOKEN(@filename,"\",LEN(@filename)-LEN(replace(@filename,"\",""))
    

    然后从那里你需要使用左加 .txt

    left(exp,LEN(exp)-10) + ".txt"
    

    【讨论】:

    • 谢谢。我已经弄清楚如何在删除时间部分之前获取文件名。因此,我很难让包通过忽略文件扩展名前的最后 6 位来动态读取文件名。
    猜你喜欢
    • 2015-02-01
    • 1970-01-01
    • 2011-01-05
    • 2021-05-26
    • 1970-01-01
    • 2014-09-09
    • 1970-01-01
    • 2017-04-14
    • 2012-02-17
    相关资源
    最近更新 更多