【问题标题】:SSIS package to export query result to CSV does not export all the records将查询结果导出到 CSV 的 SSIS 包不会导出所有记录
【发布时间】:2018-09-16 07:46:09
【问题描述】:

我正在 Visual Studio 2015(带有数据工具扩展)上开发一个简单的 SSIS 包:它有一个连接(Sql server 2008),一个 OLEDB 源,包含一个查询,连接到一个平面文件目标。

  • 数据库连接已经过测试并且可以正常工作;
  • oleDb 来源有效,查询中没有变量;
  • OleDb 源内部的查询返回大约 700 条记录
  • OleDb 中的预览返回 200 条记录(按照配置)
  • 查询和文件之间的映射是 1:1,查询中的所有字段都以相同的顺序包含在生成的 csv 中。

当我运行包时,会创建 csv 文件,它包含完全需要的字段,但只有 169 条记录(预计大约 700 条)。

我将 csv 的内容与查询中的数据进行了比较,发现:

  • 记录的顺序不同
  • 未导出的记录看似随机放置在 sql 结果中(我以为导出的是第一个但事实并非如此)
  • 缺失记录中的数据没有什么奇怪的(没有长字符串或空值,或超出范围的值)
  • 重复执行多次提取和丢失的记录完全相同,顺序相同。

您有什么建议可以解决这个问题吗?我需要以相同的顺序导出所有记录。查询中的 Order by 子句似乎被导出忽略了,导出的记录是原始记录的样本。

【问题讨论】:

  • 这似乎很奇怪,除非您使用的是 .csv 文件的副本,该文件在电子表格中具有以前的格式。创建一个新的 .csv(不是副本)。获取查询的结果集并手动插入 .csv。删除行。然后在您的 SSIS 包中映射数据。看看是否有效
  • 记录的顺序不同。你这是什么意思?数据在 SQL Server 中没有按任何特定顺序存储,那么您在说什么“顺序”?确保查询中数据顺序的唯一方法是使用ORDER BY,而在 SSIS 中唯一的方法是使用排序转换。 SSIS 不会只是不导出某些行,这是有原因的。那是什么原因可能有很多;例如转换错误、过滤结果集、过滤数据流等
  • 确保行在任何时候都不会被忽略失败记录的静默错误处理丢弃。源中的ORDER BY 子句将确保按顺序处理行。执行后查看 DTS 的输出窗口以检查异常情况。
  • 请仔细检查您的 OLEDB 源查询,您的输出查询中可能缺少一个简单的逻辑
  • 您可能需要确保查看的是正确的 csv。有多少条记录进入输出对象?

标签: sql-server csv ssis export-to-csv


【解决方案1】:

我发现了问题,我的错。

我从sql management studio检查并保存了数据,然后开发了dtsx。

同时,数据(我认为是不可修改的)已被修改,因此 dtsx 显示了更新版本,我将其与旧版本进行了对比。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多