两台服务器:
S1:数据库服务器
S2:FTP服务器
在FTP服务器上的某个路径,每天会自动产生一个.txt的文本文档,希望实现每天自动将此文档数据导入数据库服务器的某张表里。

解决方案 »

  1.   

    楼上的正解,使用SSIS 有专门对付这种目录循环的组件 然后导入,一头连接源文件  一端连接数据库目标服务器即可,然后一个loop即可完成导入
      

  2.   


    可以参考这两篇文章,详细的步骤都在里边:
    http://www.mssqltips.com/sqlservertip/2874/loop-through-flat-files-in-sql-server-integration-services/
    https://www.simple-talk.com/sql/ssis/ssis-basics-introducing-the-foreach-loop-container/
      

  3.   

    我们的考勤机打卡记录全部是下载到txt文件里的,我就用SSIS将其导入到数据库里,
    不过每天5个时间点自动执行是要在windows里建立任务计划,自动执行批处理文件,
    其批处理文件内容如下:(SSIS的包如何执行,对你会有帮助的)
    @echo off
    dtexec /f "F:\PKG_ExportToOracleNew.dtsx"
      

  4.   


    可以参考这两篇文章,详细的步骤都在里边:
    http://www.mssqltips.com/sqlservertip/2874/loop-through-flat-files-in-sql-server-integration-services/
    https://www.simple-talk.com/sql/ssis/ssis-basics-introducing-the-foreach-loop-container/
    启动 SSIS 包“Package.dtsx”。
    信息: 0x4004300A,位于 数据流任务, DTS.Pipeline: 正开始验证阶段。
    信息: 0x40043006,位于 数据流任务, DTS.Pipeline: 正开始执行阶段的准备工作。
    信息: 0x40043007,位于 数据流任务, DTS.Pipeline: 正开始执行之前阶段。
    信息: 0x402090DC,位于 数据流任务, 平面文件源 [1073]: 已开始处理文件“D:\file\test.txt”。
    信息: 0x4004300C,位于 数据流任务, DTS.Pipeline: 正开始执行阶段。
    信息: 0x402090DE,位于 数据流任务, 平面文件源 [1073]: 为文件“D:\file\test.txt”处理的数据行总数为 2。
    错误: 0xC0202009,位于 数据流任务, OLE DB 目标 [1126]: 出现 OLE DB 错误。错误代码: 0x80004005。
    已获得 OLE DB 记录。源:“Microsoft SQL Native Client” Hresult: 0x80004005 说明:“对于造型说明无效的字符值”。
    错误: 0xC020901C,位于 数据流任务, OLE DB 目标 [1126]: 输入“OLE DB 目标输入”(1139) 上的 输入列“发生日期”(1184) 出错。返回的列状态是:“由于可能丢失数据,所以无法转换该值。”。
    错误: 0xC0209029,位于 数据流任务, OLE DB 目标 [1126]: “输入“OLE DB 目标输入”(1139)”失败,错误代码为 0xC0209077,而且针对“输入“OLE DB 目标输入”(1139)”的错误行处理设置指定一旦出错就失败。在指定组件的指定对象上出错。
    错误: 0xC0047022,位于 数据流任务, DTS.Pipeline: 组件“OLE DB 目标”(1126)的 ProcessInput 方法失败,错误代码为 0xC0209029。标识的这个组件从 ProcessInput 方法返回了一个错误。虽然该错误是此组件特有的,但却是致命的,将导致数据流任务停止运行。
    错误: 0xC0047021,位于 数据流任务, DTS.Pipeline: 线程“WorkThread0”已退出,错误代码为 0xC0209029。
    信息: 0x40043008,位于 数据流任务, DTS.Pipeline: 正开始执行之后阶段。
    信息: 0x402090DD,位于 数据流任务, 平面文件源 [1073]: 文件“D:\file\test.txt”已处理完毕。
    信息: 0x402090DF,位于 数据流任务, OLE DB 目标 [1126]: 数据插入操作的最终提交已开始。
    信息: 0x402090E0,位于 数据流任务, OLE DB 目标 [1126]: 数据插入操作的最终提交已结束。
    信息: 0x40043009,位于 数据流任务, DTS.Pipeline: 正开始清除阶段。
    信息: 0x4004300B,位于 数据流任务, DTS.Pipeline: “组件“OLE DB 目标”(1126)”已写入 0 行。
    任务失败: 数据流任务
    警告: 0x80019002,位于 Foreach 循环容器: Execution 方法成功,但出现的错误数(5)达到了允许的最大值(1),因此导致失败。当错误数达到 MaximumErrorCount 中指定的数目时将发生这种情况。请更改 MaximumErrorCount 或纠正这些错误。
    警告: 0x80019002,位于 Package: Execution 方法成功,但出现的错误数(5)达到了允许的最大值(1),因此导致失败。当错误数达到 MaximumErrorCount 中指定的数目时将发生这种情况。请更改 MaximumErrorCount 或纠正这些错误。
    SSIS 包“Package.dtsx”已完成: 失败。
      

  5.   


    可以参考这两篇文章,详细的步骤都在里边:
    http://www.mssqltips.com/sqlservertip/2874/loop-through-flat-files-in-sql-server-integration-services/
    https://www.simple-talk.com/sql/ssis/ssis-basics-introducing-the-foreach-loop-container/
    启动 SSIS 包“Package.dtsx”。
    信息: 0x4004300A,位于 数据流任务, DTS.Pipeline: 正开始验证阶段。
    信息: 0x40043006,位于 数据流任务, DTS.Pipeline: 正开始执行阶段的准备工作。
    信息: 0x40043007,位于 数据流任务, DTS.Pipeline: 正开始执行之前阶段。
    信息: 0x402090DC,位于 数据流任务, 平面文件源 [1073]: 已开始处理文件“D:\file\test.txt”。
    信息: 0x4004300C,位于 数据流任务, DTS.Pipeline: 正开始执行阶段。
    信息: 0x402090DE,位于 数据流任务, 平面文件源 [1073]: 为文件“D:\file\test.txt”处理的数据行总数为 2。
    错误: 0xC0202009,位于 数据流任务, OLE DB 目标 [1126]: 出现 OLE DB 错误。错误代码: 0x80004005。
    已获得 OLE DB 记录。源:“Microsoft SQL Native Client” Hresult: 0x80004005 说明:“对于造型说明无效的字符值”。
    错误: 0xC020901C,位于 数据流任务, OLE DB 目标 [1126]: 输入“OLE DB 目标输入”(1139) 上的 输入列“发生日期”(1184) 出错。返回的列状态是:“由于可能丢失数据,所以无法转换该值。”。
    错误: 0xC0209029,位于 数据流任务, OLE DB 目标 [1126]: “输入“OLE DB 目标输入”(1139)”失败,错误代码为 0xC0209077,而且针对“输入“OLE DB 目标输入”(1139)”的错误行处理设置指定一旦出错就失败。在指定组件的指定对象上出错。
    错误: 0xC0047022,位于 数据流任务, DTS.Pipeline: 组件“OLE DB 目标”(1126)的 ProcessInput 方法失败,错误代码为 0xC0209029。标识的这个组件从 ProcessInput 方法返回了一个错误。虽然该错误是此组件特有的,但却是致命的,将导致数据流任务停止运行。
    错误: 0xC0047021,位于 数据流任务, DTS.Pipeline: 线程“WorkThread0”已退出,错误代码为 0xC0209029。
    信息: 0x40043008,位于 数据流任务, DTS.Pipeline: 正开始执行之后阶段。
    信息: 0x402090DD,位于 数据流任务, 平面文件源 [1073]: 文件“D:\file\test.txt”已处理完毕。
    信息: 0x402090DF,位于 数据流任务, OLE DB 目标 [1126]: 数据插入操作的最终提交已开始。
    信息: 0x402090E0,位于 数据流任务, OLE DB 目标 [1126]: 数据插入操作的最终提交已结束。
    信息: 0x40043009,位于 数据流任务, DTS.Pipeline: 正开始清除阶段。
    信息: 0x4004300B,位于 数据流任务, DTS.Pipeline: “组件“OLE DB 目标”(1126)”已写入 0 行。
    任务失败: 数据流任务
    警告: 0x80019002,位于 Foreach 循环容器: Execution 方法成功,但出现的错误数(5)达到了允许的最大值(1),因此导致失败。当错误数达到 MaximumErrorCount 中指定的数目时将发生这种情况。请更改 MaximumErrorCount 或纠正这些错误。
    警告: 0x80019002,位于 Package: Execution 方法成功,但出现的错误数(5)达到了允许的最大值(1),因此导致失败。当错误数达到 MaximumErrorCount 中指定的数目时将发生这种情况。请更改 MaximumErrorCount 或纠正这些错误。
    SSIS 包“Package.dtsx”已完成: 失败。

    错误: 0xC020901C,位于 数据流任务, OLE DB 目标 [1126]: 输入“OLE DB 目标输入”(1139) 上的 输入列“发生日期”(1184) 
    是数据转换的问题,查一下你的发生日期列对应的目的字段是什么类型是否需要字段类型转换?
      

  6.   


    可以参考这两篇文章,详细的步骤都在里边:
    http://www.mssqltips.com/sqlservertip/2874/loop-through-flat-files-in-sql-server-integration-services/
    https://www.simple-talk.com/sql/ssis/ssis-basics-introducing-the-foreach-loop-container/
    启动 SSIS 包“Package.dtsx”。
    信息: 0x4004300A,位于 数据流任务, DTS.Pipeline: 正开始验证阶段。
    信息: 0x40043006,位于 数据流任务, DTS.Pipeline: 正开始执行阶段的准备工作。
    信息: 0x40043007,位于 数据流任务, DTS.Pipeline: 正开始执行之前阶段。
    信息: 0x402090DC,位于 数据流任务, 平面文件源 [1073]: 已开始处理文件“D:\file\test.txt”。
    信息: 0x4004300C,位于 数据流任务, DTS.Pipeline: 正开始执行阶段。
    信息: 0x402090DE,位于 数据流任务, 平面文件源 [1073]: 为文件“D:\file\test.txt”处理的数据行总数为 2。
    错误: 0xC0202009,位于 数据流任务, OLE DB 目标 [1126]: 出现 OLE DB 错误。错误代码: 0x80004005。
    已获得 OLE DB 记录。源:“Microsoft SQL Native Client” Hresult: 0x80004005 说明:“对于造型说明无效的字符值”。
    错误: 0xC020901C,位于 数据流任务, OLE DB 目标 [1126]: 输入“OLE DB 目标输入”(1139) 上的 输入列“发生日期”(1184) 出错。返回的列状态是:“由于可能丢失数据,所以无法转换该值。”。
    错误: 0xC0209029,位于 数据流任务, OLE DB 目标 [1126]: “输入“OLE DB 目标输入”(1139)”失败,错误代码为 0xC0209077,而且针对“输入“OLE DB 目标输入”(1139)”的错误行处理设置指定一旦出错就失败。在指定组件的指定对象上出错。
    错误: 0xC0047022,位于 数据流任务, DTS.Pipeline: 组件“OLE DB 目标”(1126)的 ProcessInput 方法失败,错误代码为 0xC0209029。标识的这个组件从 ProcessInput 方法返回了一个错误。虽然该错误是此组件特有的,但却是致命的,将导致数据流任务停止运行。
    错误: 0xC0047021,位于 数据流任务, DTS.Pipeline: 线程“WorkThread0”已退出,错误代码为 0xC0209029。
    信息: 0x40043008,位于 数据流任务, DTS.Pipeline: 正开始执行之后阶段。
    信息: 0x402090DD,位于 数据流任务, 平面文件源 [1073]: 文件“D:\file\test.txt”已处理完毕。
    信息: 0x402090DF,位于 数据流任务, OLE DB 目标 [1126]: 数据插入操作的最终提交已开始。
    信息: 0x402090E0,位于 数据流任务, OLE DB 目标 [1126]: 数据插入操作的最终提交已结束。
    信息: 0x40043009,位于 数据流任务, DTS.Pipeline: 正开始清除阶段。
    信息: 0x4004300B,位于 数据流任务, DTS.Pipeline: “组件“OLE DB 目标”(1126)”已写入 0 行。
    任务失败: 数据流任务
    警告: 0x80019002,位于 Foreach 循环容器: Execution 方法成功,但出现的错误数(5)达到了允许的最大值(1),因此导致失败。当错误数达到 MaximumErrorCount 中指定的数目时将发生这种情况。请更改 MaximumErrorCount 或纠正这些错误。
    警告: 0x80019002,位于 Package: Execution 方法成功,但出现的错误数(5)达到了允许的最大值(1),因此导致失败。当错误数达到 MaximumErrorCount 中指定的数目时将发生这种情况。请更改 MaximumErrorCount 或纠正这些错误。
    SSIS 包“Package.dtsx”已完成: 失败。

    错误: 0xC020901C,位于 数据流任务, OLE DB 目标 [1126]: 输入“OLE DB 目标输入”(1139) 上的 输入列“发生日期”(1184) 
    是数据转换的问题,查一下你的发生日期列对应的目的字段是什么类型是否需要字段类型转换?我数据库的字段类型是smalldatetime,我要怎么设置呢?
    我测试了下,我改为varchar的类型就没问题了。
      

  7.   


    可以参考这两篇文章,详细的步骤都在里边:
    http://www.mssqltips.com/sqlservertip/2874/loop-through-flat-files-in-sql-server-integration-services/
    https://www.simple-talk.com/sql/ssis/ssis-basics-introducing-the-foreach-loop-container/
    启动 SSIS 包“Package.dtsx”。
    信息: 0x4004300A,位于 数据流任务, DTS.Pipeline: 正开始验证阶段。
    信息: 0x40043006,位于 数据流任务, DTS.Pipeline: 正开始执行阶段的准备工作。
    信息: 0x40043007,位于 数据流任务, DTS.Pipeline: 正开始执行之前阶段。
    信息: 0x402090DC,位于 数据流任务, 平面文件源 [1073]: 已开始处理文件“D:\file\test.txt”。
    信息: 0x4004300C,位于 数据流任务, DTS.Pipeline: 正开始执行阶段。
    信息: 0x402090DE,位于 数据流任务, 平面文件源 [1073]: 为文件“D:\file\test.txt”处理的数据行总数为 2。
    错误: 0xC0202009,位于 数据流任务, OLE DB 目标 [1126]: 出现 OLE DB 错误。错误代码: 0x80004005。
    已获得 OLE DB 记录。源:“Microsoft SQL Native Client” Hresult: 0x80004005 说明:“对于造型说明无效的字符值”。
    错误: 0xC020901C,位于 数据流任务, OLE DB 目标 [1126]: 输入“OLE DB 目标输入”(1139) 上的 输入列“发生日期”(1184) 出错。返回的列状态是:“由于可能丢失数据,所以无法转换该值。”。
    错误: 0xC0209029,位于 数据流任务, OLE DB 目标 [1126]: “输入“OLE DB 目标输入”(1139)”失败,错误代码为 0xC0209077,而且针对“输入“OLE DB 目标输入”(1139)”的错误行处理设置指定一旦出错就失败。在指定组件的指定对象上出错。
    错误: 0xC0047022,位于 数据流任务, DTS.Pipeline: 组件“OLE DB 目标”(1126)的 ProcessInput 方法失败,错误代码为 0xC0209029。标识的这个组件从 ProcessInput 方法返回了一个错误。虽然该错误是此组件特有的,但却是致命的,将导致数据流任务停止运行。
    错误: 0xC0047021,位于 数据流任务, DTS.Pipeline: 线程“WorkThread0”已退出,错误代码为 0xC0209029。
    信息: 0x40043008,位于 数据流任务, DTS.Pipeline: 正开始执行之后阶段。
    信息: 0x402090DD,位于 数据流任务, 平面文件源 [1073]: 文件“D:\file\test.txt”已处理完毕。
    信息: 0x402090DF,位于 数据流任务, OLE DB 目标 [1126]: 数据插入操作的最终提交已开始。
    信息: 0x402090E0,位于 数据流任务, OLE DB 目标 [1126]: 数据插入操作的最终提交已结束。
    信息: 0x40043009,位于 数据流任务, DTS.Pipeline: 正开始清除阶段。
    信息: 0x4004300B,位于 数据流任务, DTS.Pipeline: “组件“OLE DB 目标”(1126)”已写入 0 行。
    任务失败: 数据流任务
    警告: 0x80019002,位于 Foreach 循环容器: Execution 方法成功,但出现的错误数(5)达到了允许的最大值(1),因此导致失败。当错误数达到 MaximumErrorCount 中指定的数目时将发生这种情况。请更改 MaximumErrorCount 或纠正这些错误。
    警告: 0x80019002,位于 Package: Execution 方法成功,但出现的错误数(5)达到了允许的最大值(1),因此导致失败。当错误数达到 MaximumErrorCount 中指定的数目时将发生这种情况。请更改 MaximumErrorCount 或纠正这些错误。
    SSIS 包“Package.dtsx”已完成: 失败。

    错误: 0xC020901C,位于 数据流任务, OLE DB 目标 [1126]: 输入“OLE DB 目标输入”(1139) 上的 输入列“发生日期”(1184) 
    是数据转换的问题,查一下你的发生日期列对应的目的字段是什么类型是否需要字段类型转换?这个影响大吗?
    [OLE DB 目标 [1126]] 警告: 外部元数据列集合与数据源列不同步。需要对外部元数据列集合中的列“fsrq”进行更新。