带有文件计数

时间:2017-11-03 11:10:14

标签: sql sql-server tsql sql-server-2016

我正在尝试编写一个循环遍历其自身的存储过程,直到满足设置文件计数,然后继续运行。但是,由于我创建了一个带有结果的临时表,我无法将其转换为while循环的游标。

以下是获取文件的查询

DROP TABLE IF EXISTS #1
CREATE TABLE #1 (
       id int IDENTITY(1,1)
      ,subdirectory nvarchar(512)
      ,depth int
      ,isfile bit);

 INSERT #1 
EXEC xp_dirtree '\\ServerName\File_BackUp\CSV\', 10, 1
SELECT COUNT(ID) FROM #1;

是否可以将其包裹起来以使其保持循环直到计数达到10?

2 个答案:

答案 0 :(得分:0)

WHILE在这里应该可以正常工作。尝试:

WHILE (SELECT COUNT(ID) FROM #1 < 10)
BEGIN
    INSERT #1
    EXEC xp_dirtree '\\ServerName\File_BackUp\CSV\', 10, 1
    WAITFOR DELAY '00:00:05'    -- Wait five seconds between checks
                                -- so you don't flog your machine badly.
END

答案 1 :(得分:0)

您的问题看起来像某种集成方案(检查传入文件的目录)。

如果您的情况严重依赖于移动文件,转换,加载等 我建议使用适当的工具,如SQL Server Integration Services。

您可以轻松构建FileWatcher任务:

Developing a File Watcher Task for SQL Server Integration Services

或使用第三方:

Using the Konesans File Watcher Task in SSIS to Process Data Files

  

<强> File Watcher Task

     

文件监视器任务执行它真正说的内容,它会查看等待文件的文件夹。当找到可用文件时,任务完成,返回文件名以便在包中继续使用。