2017-04-07 50 views
0

SQL服務器的FileTable舉動目錄我目前正在努力想在的FileTable從一個位置移動目錄到另一個。我似乎無法找到任何有關如何通過T-SQL將其中有子目錄和文件的目錄移動到不同位置的任何信息。與內容的T-SQL

我已經找到了如何將文件從一個位置移動到另一個例子,此方法將只要在目錄工作爲空,但不是當它在它的內容,因爲它會引發衝突。

我想這是因爲路徑定位器需要對正在移動的目錄中的任何內容強調再生,但我不知道如何實現這一目標。

任何幫助或指導將是非常讚賞

更新一個

在SQL Server 2016的當前版本經過大量的研究,我不能看到這樣做的方法,如果沒有某種形式的遞歸的邏輯。我幾乎完全通過在C#代碼中使用遞歸邏輯來構建我的開源數據庫庫,而不是在T-SQL中完成所有工作。

一旦完成,我將與過程進一步更新,它是如何工作的。

回答

0

雖然這不是在T-SQL的答案我想這可能是有益的,張貼在這裏,因爲它是如何做到這一點的理論。

我使用C#.NET能夠做出讓我移動的目錄結構的遞歸函數解決了這個問題。這是我的開源數據庫庫DotNetSDB的FileTable擴展中的內置函數。

如果您想查看源代碼,請隨時轉到網站並查看SQL Server常規FileTable擴展更新方法。

一般理論

  • 遞歸函數開始
  • 它創造在新的環境下使用的文件夾,通過
  • 它然後遍歷所有文件夾中的舊同名的新目錄目錄,並再次運行遞歸函數,但是在循環完成後使用下一個子文件夾層
  • ,然後獲取所有包含此遞歸當前目錄的文件作爲其父項,環比他們transfering他們parent_path_locators到新文件夾
  • 一旦所有的文件已經被移動它抓住舊的當前文件夾流ID
  • 它然後刪除舊的當前目錄
  • 一旦刪除,則它會更新新創建的目錄流ID到原來已被刪除的ID。

報告摘要

因爲這個函數是遞歸的它,然後再創建所有的文件夾結構作爲其工作向後它傳輸的所有文件到新的位置,並刪除原始目錄逐個。在每次遞歸結束時,我們刪除該文件夾的原因是,我們可以將流ID恢復到原來的狀態,因此除了其物理位置被移動的 之外沒有發生任何變化。