2012-08-07 114 views
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个临时表。

+2

优雅被严重高估:如果它的工作,不要修复它:) – dasblinkenlight 2012-08-07 13:53:33

+0

事情是我不知道文件系统有多深,所以我最终不得不像15临时表makle,虽然这不是真的我希望它可以扩展到文件系统大小 – EmberZ 2012-08-07 13:55:21

+0

[部分优雅是拼写](https://stackoverflow.com/posts/11847506/revisions)。 – 2017-08-23 01:24:56

回答

0

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

0

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

相关问题