【发布时间】:2014-08-11 22:17:13
【问题描述】:
我收集了一个数据集并使用 RecordSet 目标将其分配给一个对象变量。
根据数据集中的记录数,我需要遍历数据集并将记录吐出到文件中。例如,如果原始数据集中有 5000 条记录,我需要循环它 5 次以创建一个包含 1000 条记录的文件,称为 MyFile_1.txt、MyFile_2.txt 等。
在数据流中的脚本组件任务中,我使用 RecordSet 中的列填充输出缓冲区。为此,我创建了一个新的 OleDbAdapter 和 DataTable,然后用对象变量填充它们。
这第一次效果很好。但是,第二次,DataAdapter.Fill(DataTable, ObjectVariable) 方法执行没有错误,但 DataTable 中没有行。在调试时,我可以深入查看 Object 变量中仍然有记录。
有人有什么想法吗?
【问题讨论】:
-
关于不提供实际代码的代码的问题对于调试来说相当具有挑战性。也就是说,我相信通过调用
Fill方法,您正在使用整个记录集对象。标记现在位于记录集的末尾。您要么需要将标记重置为最后一个“使用”点,要么只使用每次通过数据流所需的行。 -
抱歉,我从脚本任务中以非常基本的方式执行此操作:OleDbDataAdapter da = new OleDbDataAdapter();数据表 dt = 新数据表(); da.Fill(dt, Variables.MyRecordSet);第一次包含记录,第二次触发,没有记录。如何将标记重置为上次使用的点?
-
我不知道,这就是为什么我发表评论而不是回答的原因。我的方法是不使用
Fill方法,而是逐行使用它,直到达到我的极限 -
为什么要对记录集进行第二次传递?另外,您使用的是什么版本的 SSIS?
-
您真的需要使用脚本记录集吗?您可以先使用
SELECT COUNT(*) FROM Table获取记录集计数,然后使用ROWNUMBER之类的东西获取记录编号并相应地拆分它。这些数据的来源是什么?
标签: ssis