将多个平面文件导入到多个 SQL 表

2024-04-24

这是我的文件夹设置。

这是文件设置

这个想法是遍历文件夹并将文件内容放入数据库上的表 File.dbo (还有 FileB、FileC 等)。所有文件夹的文件名结构都相同。

我有这个 ssis 包,我在其中使用 foreachloop-> 数据流解析文件夹。

我已经检查过我制定的获取文件名的算法是否有效

REVERSE(Substring(Reverse( @[User::FileName] ),5,LEN( @[User::FileName] ))) == "FileA"

It parses out the .txt extension. Below is the setup of the foreach loop I have. Foreach

为了启动整个包,我在文件夹内放置了 .txt 文件,并创建了 foreach 容器循环子文件夹。

因为,我并不是真正的 SSIS 包开发人员,所以这是我通过一些研究所能做的最好的事情。我遇到的问题是它似乎部分起作用。

这些快照是我所遇到的场景的模型,实际上我有 200 多个文件夹,其中有 50 个文本文件,每个文件都指定将内容转储到各自的命名表中。

但是包成功执行后我看到的总行数非常低并且不可能是正确的。无论如何,是否可以获取它遍历的文件夹数量的计数/列表。另外,我做错了什么吗?

理想情况下,我不想从 .txt 文件开始,而是将整个文件转到文件夹,获取文件名(我认为我有一个工作代码)并将所有信息转储到 OLEDB目的地。

非常感谢任何帮助、资源链接。


解决方案概述

您可以在 foreach 循环中使用一个 DataFlow 任务来实现这一点,但技巧是您必须从变量中读取源平面文件名和目标 SQL 表名称

注意:平面文件结构必须相同,SQL 表必须具有相同的结构


详细解决方案

  1. 右键单击Control Flow窗口并单击Variables
  1. 声明 2 个 SSIS 变量:

    • FlatFilename: 类型String并分配默认值随机文件路径(i.e. C:\MockFolder\FileA.txt)
    • 'SQL表名: of typeString` 并分配给以下表达式:

这是假设所有目标表具有相同的架构dbo

 "[dbo].[" + REPLACE(RIGHT( @[User::FlatFilename] , FINDSTRING(REVERSE( @[User::FlatFilename]  ) , "\\", 1) - 1),".txt","") + "]"
  1. Add a Foreach Loop Container and a DataFlow Task在其中,单击DataFlow Task并在属性选项卡上设置Delay Validation财产给True
  1. 双击Foreach Loop container并选择主目录和文件过滤器*.txt还选择fully qualified检索文件名选项
  1. 转到变量映射选项卡并选择@[User::FlatFilename]多变的
  1. 添加2个连接管理器

    • FlatFileConnection:一个平面文件连接管理器,通过随机选择一个来配置它File (i.e. C:\MockFolder\FileA.txt)
    • OLEDBConnection:一个 OLEDB 连接管理器,并将其配置到您的目标 SQL Server 数据库
  2. In The DataFlow Task, add a Flat File Source and an OLEDB Destination, 在里面OLEDB Destination select Table name from variable选项并选择@[User::SQLTablename]作为变量名

  1. 在源和目标之间映射列

  2. 单击FlatFileConnection在连接管理器窗口中,按F4要显示属性选项卡,请单击“表达式”

  1. 选择Connection String属性为其分配以下表达式:

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

将多个平面文件导入到多个 SQL 表 的相关文章

  • SQL Server 2005 - 达到表行大小限制

    有没有一种干净的方法可以在向表添加新列之前确定表的行大小 并且不超过 8060 字节的限制 例如 如果表行长度当前为 8055 字节 并且我想添加日期时间 8 字节 则这将结束 因为它将变为 8063 字节 不包括空映射 但是 如果我添加一
  • 防止从 SSMS 导出的文件中受影响的行条目

    我怎样才能防止这样的条目 123456 rows affected 在文件末尾导出的文本文件中 似乎没有找到选项 谢谢 你可以使用 SET NOCOUNT ON 不设置计数 https learn microsoft com en us s
  • 如何在 where 子句中使用别名? [复制]

    这个问题在这里已经有答案了 可能的重复 在 WHERE 子句中引用列别名 https stackoverflow com questions 8370114 referring to a column alias in a where cl
  • 小数除以小数并得到零

    为什么当我这样做时 select CAST 1 AS DECIMAL 38 28 CAST 1625625 AS DECIMAL 38 28 我得到 0 吗 但是当我得到 0 时 select CAST 1 AS DECIMAL 20 10
  • 当我尝试连接到数据库时收到“错误:无法初始化 OLE”? C#

    我正在尝试通过 C 连接到数据库 但这样做时收到一条非常无用的错误消息 08 44 17 错误 无法初始化 OLE 08 44 17 错误 无法初始化 OLE 我尝试寻找解决方案 但没有成功 我也尝试重新启动计算机 但这也没有帮助 我正在运
  • 如何授予用户访问 SQL Server 中的 sys.master_files 的权限?

    我需要授予数据库用户读取权限sys master files桌子 我怎样才能做到这一点 目前用户拥有以下权限 Calling SELECT on sys master files返回空结果 我还使用以下命令测试了相同的查询sa用户按预期工作
  • 如何跟踪数据库连接泄漏

    我们有一个应用程序似乎存在连接泄漏 SQL Server 表示已达到最大池大小 我独自一人在我的开发机器上 显然 只需导航应用程序 我就会触发此错误 SQL Server 活动监视器显示大量正在使用我的数据库的进程 我想查找哪些文件打开连接
  • 尝试使用 SQL 身份验证登录失败

    我正在尝试使用 sa 用户名及其密码连接到 SQL Server 2008 在 SQL Server 日志文件中我看到以下错误 用户 sa 登录失败 原因 尝试使用 SQL 登录 认证失败 服务器配置为 Windows 身份验证 仅有的 当
  • 游标与更新

    一家公司使用 SQL Server 数据库来存储有关其客户及其业务交易的信息 您所在的城市引入了新的区号 对于前缀小于 500 的电话号码 区号 111 保持不变 前缀为 500 及以上的号码将分配区号 222 客户表中电话列中的所有电话号
  • 导致聚集索引扫描的日期参数

    我有以下查询 DECLARE StartDate DATE 2017 09 22 DECLARE EndDate DATE 2017 09 23 SELECT a col1 a col2 b col1 b col2 b col3 a col
  • 当列的数据类型为 int 时,如何用字符串替换 null

    我有一个包含 3 列的表和如下示例数据 所有列都是数据类型int 我有这个查询 select foodid dayid from Schedule 我要更换dayid用字符串 ifdayid null 为此我尝试了这个查询 select f
  • SSIS:如何将项目连接管理器移动到包中

    我有一个 2012 SSIS 项目 其中在项目级别定义了许多连接管理器 该项目还包括许多引用这些连接管理器的包 现在我想将我的项目转换为部署模型 但向导指定我需要删除项目中的连接管理器 这意味着将连接管理器移动到包中 如何将项目级连接管理器
  • 如何确保使用 Microsoft Sync Framework 同步成功?

    我正在使用微软同步框架 https msdn microsoft com en us sync bb736753 aspx同步两个 Microsoft SQL Server 上的表 我创建了一个测试应用程序 它每秒在远程服务器上的表中生成一
  • 如何使用 SQL Server 查询对“版本号”列进行排序

    我想知道我们当中的 SQL 天才是否可以向我伸出援助之手 我有一个专栏VersionNo在表中Versions包含 版本号 值 例如 VersionNo 1 2 3 1 1 10 3 1 1 4 7 2 etc 我正在寻找对此进行排序 但不
  • 在 SSIS 中使用 OLE DB 从 Sybase 提取数据时出错

    我在 SSIS 2017 中使用 Advantage 11 OLE DB Provider 从 Sybase 提取数据时遇到问题 我可以连接到数据库 查看表列表 并且在选择表作为数据源时 我可以看到列 但是 当我单击 预览 或运行数据流任务
  • SSIS使用列位置而不是名称导入Excel文档

    我想知道是否可以通过按位置引用列来使用 SSIS 导入 Excel 文档 例如 导入列 A D M AA 等 我问这个问题是因为我需要从第三方加载多个 Excel 文档 每个文档在相应的列中包含相同的数据类型 但每个文档的列名称不同 Tha
  • 增量SQL查询

    我的应用程序有一组固定的 SQL 查询 这些查询以轮询模式运行 每 10 秒一次 由于数据库的大小 gt 100 GB 和设计 超级规范化 我遇到了性能问题 每当数据库上发生更改查询结果的 CRUD 事件时 是否可以对给定查询进行增量更改
  • 别名 .\SQLEXPRESS 为 (LocalDB)\MSSQLLocalDB

    I have SQLEXPRESS已安装 但代码假设我有一个名为 LocalDB MSSQLLocalDB 如何创建别名以便不必安装SQLLocalDb 启动 Sql Server 配置管理器 使用以下参数为 64 位 SQL Native
  • 在 SQL Server 数据库之间传递用户定义的表类型

    我在 SQL Server 的一个数据库中有一个用户定义的表类型 我们称之为DB1 我的类型的定义非常简单 仅包含 2 列 创建我的类型的脚本如下 CREATE TYPE dbo CustomList AS TABLE ID int Dis
  • 无法更新 .mdf 数据库,因为该数据库是只读的(Windows 应用程序)

    我使用 C 创建了一个数据库 Windows 应用程序 我的应用程序在 Windows XP 上成功运行 但在 Vista 或 Windows 7 系统上无法正确执行 我的应用程序显示类似以下内容的消息 无法更新 mdf 数据库 因为该数据

随机推荐