循环遍历 table,同时记录不断添加到 table

Loop through table while records keep getting added to the table

我有一个 table (FilesToCopy) 和一个文件名列表。

id filename
1 c:\temp\file1.txt
2 c:\temp\file2.txt
3 c:\temp\file2.txt

文件一个接一个地复制到另一个位置(例如c:\test)。 我可以很容易地遍历这个 table 来为每个文件执行一个复制命令。 这只是一个读取 table 的执行 SQL 任务,将结果放入一个对象变量,然后是一个 For Each 容器。

但是,如果在执行 for each 循环期间,记录被添加到 table FilesToCopy 中怎么办?

假设 在 for each 循环中 文件 c:\temp\file99.txt 被添加到 table FilesToCopy

id filename
1 c:\temp\file1.txt
2 c:\temp\file2.txt
3 c:\temp\file2.txt
99 c:\temp\file99.txt

我能以某种方式告诉 for each 循环它还必须复制文件 c:\temp\file99.txt 即使该文件在循环开始时不存在吗?

所以效果是:

  1. table FilesToCopy 被读取,开始循环。
  2. c:\temp\file1.txt 复制到 c:\test
  3. c:\temp\file1.txt 的记录已从 table FilesToCopy
  4. 中删除
  5. c:\temp\file2.txt 复制到 c:\test
  6. c:\temp\file2.txt 的记录已从 table FilesToCopy
  7. 中删除
  8. 同时 c:\temp\file99.txt 添加到 table FilesToCopy
  9. c:\temp\file3.txt 复制到 c:\test
  10. c:\temp\file3.txt 的记录已从 table FilesToCopy
  11. 中删除
  12. c:\temp\file99.txt 复制到 c:\test
  13. c:\temp\file99.txt 的记录已从 table FilesToCopy
  14. 中删除
  15. 当tableFilesToCopy
  16. 中没有更多记录时循环结束

所以我想做的是以某种方式刷新循环开始时输入的列表。

我希望这是清楚的。

我会改用 do while 循环。

有一个名为 moreToProcess 的变量,数据类型为布尔值。

使用execute SQL statement based on count > 0

在进入循环之前设置值

循环中的第一步是使用 exec SQL.

获取要处理的记录

在退出循环之前重新运行 SQL 以重置变量。

当 moreToProcess 为真时设置为循环。