0

我目前正在编写一个程序,我在 syBase 中设置了一个文件系统我想找到所有包含我指定的文件的文件,然后我希望它找到包含所有这些文件的所有文件和很快。

现在我的代码可以工作并返回我想要的所有文件,但是我想要一个更优雅的版本,因为目前它有很多重复代码并且无论如何都不能涵盖所有文件。

我试过循环,但我运气不好。

INSERT #nodes 
    SELECT from_file
    FROM file_map 
    WHERE to_file = @fileNode

    insert #fileList
    SELECT DISTINCT file
    from #nodes


INSERT #nodes1
    SELECT from_file
    FROM file_map m
    INNER JOIN #nodes n ON m.to_file = n.file
    WHERE m.to_file LIKE '/%'

    INSERT #fileList
    SELECT DISTINCT file
    FROM #nodes1

INSERT #nodes2
    SELECT from_file
    FROM file_map m
    INNER JOIN #nodes1 n ON m.to_file = n.file
    WHERE m.to_file LIKE '/%'

    INSERT #fileList
    SELECT DISTINCT file
    FROM #nodes2

INSERT #nodes3
    SELECT from_file
    FROM file_map m
    INNER JOIN #nodes2 n ON m.to_file = n.file
    WHERE m.to_file LIKE '/%'

    INSERT #fileList
    SELECT DISTINCT file
    FROM #nodes3

这是一个非常简单的过程,我只是想不出一种让这个更整洁/更快的方法。

这只是一个例子,系统可能有 30 个文件深度,所以我不想创建 30 个临时表。

4

2 回答 2

0

您要做的是从层次结构中检索数据。可以改进您的解决方案,但您可能必须对数据库进行一些更改。SitePoint 上有一篇文章,标题Storing Hierarchical Data in a Database解释了这个概念,很清楚。

于 2012-08-07T14:06:22.757 回答
0

存储过程应该能够处理递归(虽然我不熟悉 Sybase)。我不完全确定您的架构是什么样的,但您可以使用递归来保持代码精简(有时会以性能为代价)。您需要维护一组访问过的文件,以避免无限循环。

于 2012-08-07T14:16:30.187 回答