sql - 重命名文件源

标签 sql sql-server ssis etl ssis-2012

我一直在从平面文件源开发 SSIS 包。该文件每天出现,文件名具有如下日期时间指示:

文件名_20190509042908.txt

我想知道我怎么能通过直到日期部分;我希望包动态读取文件,但它应该通过没有最后 6 位数字我只是不需要最后 6 位数字,因为它不一致。

我想通过 Filename_20190509.txt

我已经想出了如何在删除时间部分之前使用文件名。因此,我很难通过忽略文件扩展名前的最后 6 位数字来让包动态读取文件名。

任何人都可以帮我解决这个问题吗?

最佳答案

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

假设完整的文件路径存储在名为 @[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:\New Folder\1\Filename_20190503001221.txt



然后@[User::Filename]将会:

C:\New Folder\1\Filename_20190503.txt



如果您只有文件名

filename_20190503001221.txt



并且文件夹路径存储在另一个变量中,只需使用以下表达式:
@[User::Filename] = @[User::Folderpath] + "\\" + 
LEFT(TOKEN(@[User::FilePath],"\\",TOKENCOUNT(@[User::FilePath],"\\")),
LEN(TOKEN(@[User::FilePath],"\\",TOKENCOUNT(@[User::FilePath],"\\"))) - 10) + ".txt"

从变量中读取文件源

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

现在更改数据流任务 Delay validation属性值到 True .
  • Dynamic Flat File Connections in SQL Server Integration Services
  • 关于sql - 重命名文件源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56063479/

    相关文章:

    sql - 将具有嵌套连接的高级 SQL 查询转换为 Linq-to-sql

    mysql - SQL查询: Count products in category,一旦产品计入1个类别,就不计入其他类别

    sql-server - sql statement.exec错误:mssql:'?'附近的语法不正确

    sql-server - 通过 Link Server 连接时,如何将 Oracle TIMESTAMP 数据类型转换为 SQL Server DATETIME2 数据类型。

    php - 在 laravel 中编写 sql 查询时遇到困难

    .net - 为什么 Entity Framework 的 DbContext.Find() 会生成带有 select top 2 的查询?

    c# - 将 XML 数据集数据表合并为一个数据表

    sql-server - 无法更改 SSIS 转换脚本编辑器中的值

    mysql - 将数据库表中的行子集从一个数据库复制到另一个数据库

    sql - 如何在 SSIS 中使用 LIKE 运算符(或等效运算符)执行合并