2012-08-07 100 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,它解釋了這個概念,這很清楚。