如何将具有相同名称和模式但不同目录的文本文件导入数据库?

2023-11-26

我需要将多个具有相同名称和相同架构的txt文件导入到SQL Server 2008数据库中的同一个表中。我遇到的问题是它们都位于不同的目录中:

TEST
     201304
            sample1.txt
            sample2.txt
     201305
            sample1.txt
            sample2.txt
     201306
            sample1.txt
            sample2.txt

SSIS 有什么方法可以设置这个吗?


是的。你会想要使用一个Foreach 文件容器然后选中遍历子文件夹选项。

Edit

显然我的答案不够全面,所以请接受这个工作代码,它说明了我简短的原始答案的内容。

源数据

我如上所述创建了 3 个文件夹来包含文件sample1.txt and sample2.txt

C:\>MKDIR SSISDATA\SO\TEST\201304
C:\>MKDIR SSISDATA\SO\TEST\201305
C:\>MKDIR SSISDATA\SO\TEST\201306

该文件的内容如下。每个文件夹中文件的每个版本的 ID 值都会递增,并且文本值也会发生更改,以证明它已获取新文件。

ID,value
1,ABC

包生成

这部分假设你有投标助手安装。它不是解决方案所必需的,只是提供了一个未来读者可以用来重现该解决方案的通用框架

我创建了一个包含以下内容的 BIML 文件。尽管我在那里有表创建步骤,但我需要在生成包之前在目标服务器上运行该步骤。

<Biml xmlns="http://schemas.varigence.com/biml.xsd">
    <!-- Create a basic flat file source definition -->
    <FileFormats>
        <FlatFileFormat
            Name="FFFSrc"
            CodePage="1252"
            RowDelimiter="CRLF"
            IsUnicode="false"
            FlatFileType="Delimited"
            ColumnNamesInFirstDataRow="true"
        >
            <Columns>
                <Column
                    Name="ID"
                    DataType="Int32"
                    Delimiter=","
                    ColumnType="Delimited"
                />
                <Column
                    Name="value"
                    DataType="AnsiString"
                    Delimiter="CRLF"
                    InputLength="20"
                    MaximumWidth="20"
                    Length="20"
                    CodePage="1252"
                    ColumnType="Delimited"
                    />
            </Columns>
        </FlatFileFormat>
    </FileFormats>

    <!-- Create a connection that uses the flat file format defined above-->
    <Connections>
        <FlatFileConnection
            Name="FFSrc"
            FileFormat="FFFSrc"
            FilePath="C:\ssisdata\so\TEST\201306\sample1.txt"
            DelayValidation="true"
        />
        <OleDbConnection
            Name="tempdb"
            ConnectionString="Data Source=localhost\dev2012;Initial Catalog=tempdb;Provider=SQLNCLI11.1;Integrated Security=SSPI;Auto Translate=False;"
        />

    </Connections>

    <!-- Create a package to illustrate how to apply an expression on the Connection Manager -->
    <Packages>
        <Package
            Name="so_19957451"
            ConstraintMode="Linear"
        >
            <Connections>
                <Connection ConnectionName="tempdb"/>
                <Connection ConnectionName="FFSrc">
                    <Expressions>
                        <!-- Assign a variable to the ConnectionString property. 
                        The syntax for this is ConnectionManagerName.Property -->
                        <Expression PropertyName="FFSrc.ConnectionString">@[User::CurrentFileName]</Expression>
                    </Expressions>
                </Connection>
            </Connections>

            <!-- Create a single variable that points to the current file -->
            <Variables>
                <Variable Name="CurrentFileName" DataType="String">C:\ssisdata\so\TEST\201306\sample1.txt</Variable>
                <Variable Name="FileMask" DataType="String">*.txt</Variable>
                <Variable Name="SourceFolder" DataType="String">C:\ssisdata\so\TEST</Variable>
                <Variable Name="RowCountInput" DataType="Int32">0</Variable>
                <Variable Name="TargetTable" DataType="String">[dbo].[so_19957451]</Variable>
            </Variables>

            <!-- Add a foreach file enumerator. Use the above -->
            <Tasks>
                <ExecuteSQL 
                    Name="SQL Create Table"
                    ConnectionName="tempdb">
                    <DirectInput>
                        IF NOT EXISTS (SELECT * FROM sys.tables T WHERE T.name = 'so_19957451' and T.schema_id = schema_id('dbo'))
                        BEGIN
                            CREATE TABLE dbo.so_19957451(ID int NOT NULL, value varchar(20) NOT NULL);
                        END
                    </DirectInput>
                </ExecuteSQL>
                <ForEachFileLoop
                    Name="FELC Consume files"
                    FileSpecification="*.csv"
                    ProcessSubfolders="true"
                    RetrieveFileNameFormat="FullyQualified"
                    Folder="C:\"
                    ConstraintMode="Linear"
                >
                    <!-- Define the expressions to make the input folder and the file mask 
                    driven by variable values -->
                    <Expressions>
                        <Expression PropertyName="Directory">@[User::SourceFolder]</Expression>
                        <Expression PropertyName="FileSpec">@[User::FileMask]</Expression>
                    </Expressions>
                    <VariableMappings>
                        <!-- Notice that we use the convention of User.Variable name here -->
                        <VariableMapping
                            Name="0"
                            VariableName="User.CurrentFileName"
                        />
                    </VariableMappings>
                    <Tasks>
                        <Dataflow Name="DFT Import file" DelayValidation="true">
                            <Transformations>
                                <FlatFileSource Name="FFS Sample" ConnectionName="FFSrc"/>
                                <RowCount Name="RC Source" VariableName="User.RowCountInput"/>
                                <OleDbDestination 
                                    Name="OLE_DST"
                                    ConnectionName="tempdb">
                                    <TableFromVariableOutput VariableName="User.TargetTable"/>                                  
                                </OleDbDestination>
                            </Transformations>
                        </Dataflow>
                    </Tasks>
                </ForEachFileLoop>
            </Tasks>
        </Package>
    </Packages>
</Biml>

右键单击 biml 文件并选择Generate SSIS Package。此时,您应该将名为 so_19957451 的包添加到当前的 SSIS 项目中。

封装配置

不需要任何配置,因为它已经通过 BIML 完成,但摩尔屏幕截图可以提供更好的答案。

这是基本包

Control flow

这是我的变量

Variables

Foreach 循环的配置,如 MSDN 文章以及我选择 Traverse 子文件夹的注释中所述

Traverse Subfolder

将每个循环生成的值分配给变量 Current

assign variables

平面文件源有一个应用于 ConnectionString 属性的表达式,以确保它使用变量 @User::CurrentFileName。这会更改每次执行循环的源。

enter image description here

执行结果

数据库结果

enter image description here

匹配包执行的输出

信息:DFT 导入文件处的 0x402090DC,FFS 示例 [2]:文件“C:\ssisdata\so\TEST\201304\sample1.txt”的处理已开始。

信息:DFT 导入文件处的 0x402090DD,FFS 示例 [2]:文件“C:\ssisdata\so\TEST\201304\sample1.txt”的处理已结束。

信息:DFT 导入文件处的 0x402090DC,FFS 示例 [2]:文件“C:\ssisdata\so\TEST\201304\sample2.txt”的处理已开始。

信息:DFT 导入文件处的 0x402090DD,FFS 示例 [2]:文件“C:\ssisdata\so\TEST\201304\sample2.txt”的处理已结束。

信息:DFT 导入文件处的 0x402090DC,FFS 示例 [2]:文件“C:\ssisdata\so\TEST\201305\sample1.txt”的处理已开始。

信息:DFT 导入文件处的 0x402090DD,FFS 示例 [2]:文件“C:\ssisdata\so\TEST\201305\sample1.txt”的处理已结束。

信息:DFT 导入文件处的 0x402090DC,FFS 示例 [2]:文件“C:\ssisdata\so\TEST\201305\sample2.txt”的处理已开始。

信息:DFT 导入文件处的 0x402090DD,FFS 示例 [2]:文件“C:\ssisdata\so\TEST\201305\sample2.txt”的处理已结束。

信息:DFT 导入文件处的 0x402090DC,FFS 示例 [2]:文件“C:\ssisdata\so\TEST\201306\sample1.txt”的处理已开始。

信息:DFT 导入文件处的 0x402090DD,FFS 示例 [2]:文件“C:\ssisdata\so\TEST\201306\sample1.txt”的处理已结束。

信息:DFT 导入文件处的 0x402090DC,FFS 示例 [2]:文件“C:\ssisdata\so\TEST\201306\sample2.txt”的处理已开始。

信息:DFT 导入文件处的 0x402090DD,FFS 示例 [2]:文件“C:\ssisdata\so\TEST\201306\sample2.txt”的处理已结束。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将具有相同名称和模式但不同目录的文本文件导入数据库? 的相关文章

  • sql查询获取从一月到当月的所有数据,即使没有记录

    我不擅长 sql 所以任何帮助世界都很棒 我有一个 SQL 查询 可以获取从一月到当月注册的记录 我的代码示例 SELECT DatePart YEAR p createStamp as TheYear DatePart MONTH p c
  • 如何通过子 POJO 的属性过滤复合 ManyToMany POJO?

    我有两个像这样的房间实体 Entity public class Teacher implements Serializable PrimaryKey autoGenerate true public int id ColumnInfo n
  • 在 SQL Server 上执行分页的最佳方式是什么?

    我有一个数据库超过200万记录 我需要执行分页以在我的 Web 应用程序上显示 该应用程序每页必须有 10 条记录DataGrid 我已经尝试使用ROW NUMBER 但是这种方式会选择所有 200 万条记录 然后只得到 10 条记录 我也
  • H2 用户定义的聚合函数 ListAgg 不能在第一个参数上使用 DISTINCT 或 TRIM()

    所以我有一个 DB2 生产数据库 我需要在其中使用可用的函数 ListAgg 我希望使用 H2 的单元测试能够正确测试此功能 不幸的是H2不直接支持ListAgg 但是 我可以创建一个用户定义的聚合函数 import java sql Co
  • 如何通过 SQL 表关联 SQL 中的实体

    我是数据库设计的初学者 我需要为项目创建数据库 我可以用面向对象的术语解释我想要做什么 值得庆幸的是 数据库专家会很友善地向我解释如何在数据库方面处理这个问题 我想创建一个与位置实体 州 城市 有关系的用户 ID 名称 实体 所以在编程语言
  • 删除数据库中的行后如何重新排序ID

    我正在使用 C 来制作具有 sql 数据库的程序 在数据库中我有一个名为Workers 它有一个自动增量和主键ID column 当我删除一条记录时 ID 之间会出现间隙 删除记录后如何重新排序 ID UPDATE 我要做的就是找到记录后将
  • 数字表与递归 CTE 生成一系列数字

    为什么使用数字表比使用递归 CTE 动态生成它们要快得多 在我的机器上 给定一张桌子numbers单列n 主键 包含从1到100000的数字 查询如下 select n from numbers 大约需要 400 毫秒才能完成 使用递归 C
  • 我不断收到错误“关系 [TABLE] 不存在”

    我一直在尝试查询数据库中的两个表 在服务器资源管理器中 我可以看到两个表 甚至可以看到其中的列 我们将它们称为 Schema table1 和 Schema table2 其中 Schema 的第一个字母大写 我尝试运行以下查询 selec
  • 如何使用 SQL Server 2008 将行复制到同一个表中

    A 到目前为止我的方式 sqlCommand CommandText INSERT Table1 column1 column2 column3 SELECT column1 column2 column3 FROM Table1 WHER
  • SELECT NULL、*、NULL、NULL 中令人困惑的 SQL 错误

    的背景我试图解决第四个现实任务 https www hackthissite org playlevel 4 在 hackthissite org 中 无法确切地弄清楚我应该在 URL 中注入什么 SQL 来检索电子邮件列表 浪费了几个小时
  • SQL WHERE 取决于星期几

    我需要检查不同日期的记录 具体取决于当前是一周中的哪一天 在周五 我需要它查看整个下周 直到下周日 在其他任何一天 它都应该检查当前周 直到下周日 我目前有以下内容 但由于语法错误而无法工作 是否可以做一个CASE WHEN里面一个WHER
  • 基于多个表的数据更新单个表 SQL Server 2005,2008

    我需要更新表one使用表中的数据two 表一和表二没有任何公共列相关 桌子three与表相关two 例如 表一 reg det 表 reg det id reg id results 101 11 344 表二 临时表 venue resu
  • SQL 按 IN 子句中的元素排序

    我有一个ITEM表 我想返回按 IN 子句中通知的相同顺序排序的结果 这些 ID 由用户告知 今天我有这个 SELECT FROM ITEM WHERE ITEM ID IN 45 2 671 6 ORDER BY CASE ITEM ID
  • 返回日期为 null 作为 t-sql 中的最大值

    我有这张桌子 ID Date Value 3241 9 17 12 5 3241 9 16 12 100 3241 9 15 12 20 4355 9 16 12 12 4355 9 15 12 132 4355 9 14 12 4 100
  • Big Query - 将数组/json 对象转置为列

    这个问题是这两个问题的延续 Bigquery 将数组转置为列 https stackoverflow com q 64346504 7463780 大查询 将特定字段转置为列 https stackoverflow com q 643983
  • 查询和扫描多行性能缓慢

    下面的查询一行的执行时间为 6 18 分钟 Exception type 1 的基数值为 3 我不知道如何提高性能 Query select count 1 as rage tap from summary funnel 1066 s jo
  • Oracle SQL 分析查询 - 类似递归电子表格的运行总计

    我有以下数据 由A值 排序依据MM 月 The B列计算为GREATEST current value of A previous value of B 0 以类似电子表格的方式 我怎样才能计算B使用 SQL 查询 我尝试使用分析函数 但未
  • 可空数据类型与非空 varchar 数据类型 - 哪个查询速度更快?

    我们通常更愿意拥有我们所有的varchar nvarchar列不可为空使用空字符串 作为默认值 团队中有人建议nullable更好 因为 像这样的查询 Select From MyTable Where MyColumn IS NOT NU
  • 同一表中同一列的 SQL 完全外连接

    这可能更多的是一个设计问题 但我希望这在没有太多巫术的情况下是可能的 假设我有一个这样的表 SELECT FROM stuff id grp 1 a 2 a 3 a 1 b 2 b 4 b 我想要得到这样的东西 ID 按列分组 a id b
  • Web SQL 数据库 + Javascript 循环

    我正在尝试解决这个问题 但我自己似乎无法解决 我正在使用 Web SQL DB 但无法让循环正常使用它 I use for var i 0 i lt numberofArticles 1 i db transaction function

随机推荐

  • 禁用 MKMapView 中的双击缩放(iOS 6)

    在 ios 5 中 我可以通过使用新的双击手势覆盖它来禁用双击缩放 但貌似双击手势已经不在mkmapview自带的gesturerecognizer数组中了 NSArray gestureRecognizers mapView gestur
  • Github推送错误。没有权限

    我只是尝试使用以下命令从 Ubuntu 11 10 创建我的第一个存储库 我正要完成sudo git push u origin master 权限被拒绝 公钥 fatal 远端意外挂断 如何解决这个问题 我也尝试过这个 即 git pus
  • 创建 OpenID 登录小部件

    我需要一个 OpenID 登录小部件 例如 Stackoverflow 上的小部件或ID选择器 该服务已被终止 取而代之的是 RPXnow 这是一项商业服务 制作这些的最好方法是什么 是否有框架或示例实现 谷歌有一个项目叫谷歌身份工具包 G
  • 我们可以获得目录的修改时间和大小(即统计数据)吗?

    我们可以在 php 中获取目录的修改时间和大小 即统计信息 吗 如何 是的 您可以利用stat功能 stat stat path to directory echo Modification time stat mtime will sho
  • 从字符串中提取主题标签。

    如果我有这样的字符串 var comment Mmmm yummy donut at CZ 如何获取字符串变量中存在的哈希标签列表 我尝试使用 JavaScript split 方法 但我必须继续拆分从初始拆分字符串创建的所有字符串 有更简
  • 如何使用 MongoDB 聚合进行通用集合操作(​​并集、交集、差集)

    我遇到过一些特殊目的的集合运算实现 但没有遇到过一般情况 执行集合运算 特别是交集 并集 对称差 的一般情况是什么 在 where 或 map reduce 中使用 javascript 更容易弄清楚这一点 但我想知道如何在聚合中执行此操作
  • StringBuilder/StringBuffer 与“+”运算符

    我正在阅读 更好 更快 更轻的 Java 作者 Bruce Tate 和 Justin Gehtland 并且熟悉敏捷类型团队的可读性要求 例如 Robert Martin 在他的干净编码书中讨论的内容 在我现在所在的团队中 我被明确告知不
  • 如何通过 tweepy 将流式推文保存为 json?

    我已经通过在线课程学习 Python 几个月了 并且希望通过现实世界的迷你项目进一步学习 对于这个项目 我想从 Twitter Streaming API 收集推文并将其存储为 json 格式 尽管您可以选择只保存 status text
  • Laravel 4 中的自定义电子邮件标头

    我似乎无法在 Laravel 4 文档 电子邮件 API 中找到可以向电子邮件添加自定义标头的方法 例如 Mail send emails welcome data function message message gt to email
  • 为什么c++禁止void*的隐式转换?

    在C中 我们可以转换void 到任何其他指针 但C 禁止这样做 int a malloc 4 导致这个错误 invalid conversion from void to int fpermissive C 中是否存在潜在的危险 有c 的例
  • 启用 StrictMode 的 Crashlytics(检测全部)给出“检测到未标记的套接字”

    我尝试过添加Crashlytics到我的应用程序 它已经有StrictMode启用与detectAll 结果是Untagged socket detected use TrafficStats setThreadSocketTag to t
  • IE8 在重定向后打开新窗口时会丢失 cookie

    我使用的是 Internet Explorer 8 beta 2 客户端执行 POSThttp alpha foo 服务器响应重定向到http beta bar 客户端执行 GEThttp beta bar 服务器响应重定向到http be
  • 在 WPF 中对部分透明图像进行着色

    如何在不牺牲性能的情况下对 WPF 中的图像进行着色 使用 MVVM 纯粹的 XAML 解决方案将是理想的 因为修改代码中的位图会导致性能损失以及大量更改的图像 该图像不仅仅是由简单的形状组成 因此不可能使用路径 与 WinForms GD
  • MySQL 的扩展解决方案(复制、集群)

    At the startup我正在工作 我们现在正在考虑数据库的扩展解决方案 对于 MySQL 事情变得有些混乱 至少对我来说 它有MySQL集群 复制 and MySQL集群复制 从版本 5 1 6 开始 这是 MySQL 集群的异步版本
  • \frac{}{} 对我来说用 pylab 不起作用

    我对使用 python 尤其是 numpy 和 matplotlib 相当陌生 运行下面的代码 无需 frac 部分 产生错误 Normalized Distance in Chamber rac x L Expected end of t
  • 无法在 Chrome 中编辑 CSS STYLE 属性(变灰并被阻止)

    我遇到 以前没见过 一些奇怪的问题 当我输入一个网站时 有问题的网站是RunForGithub com 第一次 然后打开 Chrome Inspect 控制台 然后我可以动态修改 css 属性 但是 当我刷新页面 F5 时 我无法再修改它们
  • iPhone发出POST请求,处理cookie

    我希望有人能够阐明以下内容 我认为我正在朝着正确的方向前进 我想使用用户 密码组合登录我的服务器 然后我需要能够判断我是否正确登录 应该删除 cookie 如果是这种情况 我将发出另一个请求 感谢任何帮助 这是我正在使用的代码 NSHTTP
  • Key Vault 返回 401 和访问令牌(MSI PowerShell Function App)

    我正在尝试连接到Keyvault和我的Azure 函数 using 电源外壳 托管服务身份 MSI 已打开 并且在 Keyvault 中我授予了 MSI 获取 和 列表 访问策略 使用下面的脚本我成功获得了访问令牌 但是当我向 Keyvau
  • 我应该使用 CakePHP 2 还是 3 进行开发 [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我刚刚开始使用 CakePHP 开发一个软件即服务项目 我可以看到版本 3 仍处于测试阶段 并且我可以看到该项目需要 3 6 个月的时间 我的问题是我应该从版本 2 还是版本 3 beta
  • 如何将具有相同名称和模式但不同目录的文本文件导入数据库?

    我需要将多个具有相同名称和相同架构的txt文件导入到SQL Server 2008数据库中的同一个表中 我遇到的问题是它们都位于不同的目录中 TEST 201304 sample1 txt sample2 txt 201305 sample