2017-04-07 5 views
0

現在、FileTableのディレクトリをある場所から別の場所に移動しようとしています。サブディレクトリとその中のファイルを持つディレクトリをT-SQL経由で別の場所に移動する方法に関する情報を見つけることができないようです。SQL Server FileTableはコンテンツT-SQLを持つディレクトリを移動します

ファイルをある場所から別の場所に移動する方法の例を見つけましたが、この方法は空である限りディレクトリ内で動作しますが、コンフリクトが発生するとコンテンツにコンテンツが含まれている場合は機能しません。

移動しているディレクトリの下線付きコンテンツでパスロケータを再生成する必要があるが、これを実現する方法がわかりません。

任意のヘルプやガイダンスは非常に

をいただければ幸いアップデートワン

のSQL Server 2016の現在のバージョンでは多くの研究の後、私は、再帰的なロジックのいくつかのフォームなしでこれを行う方法を見ることができません。私は、オープンソースデータベースライブラリのC#コードで再帰的ロジックを使用してビルドしようとしていたソリューションを、T-SQLですべて行うのではなく、ほとんど完全に解決しました。

完了したら、私はプロセスとそれがどのように動作するかについてさらに更新する予定です。

答えて

0

これはT-SQLの答えではありませんが、これはどのように行うのかという理論であるため、ここに投稿することが有効かもしれないと思いました。

私はC#.Netを使用して、ディレクトリの構造を移動できる再帰関数を作成できるようにしてこの問題を解決しました。これは、オープンソースデータベースライブラリDotNetSDBのFileTable拡張機能の組み込み関数になりました。

ソースコードを参照したい場合は、Webサイトにアクセスして、SQL Serverの一般的なFileTable拡張機能の更新方法を参照してください。

一般理論

  • 再帰関数は
  • を開始したフォルダが
  • を通過したとして、それは、古いですべてのフォルダを超えるループと同じ名前を使用して、新しい場所に新しいディレクトリを作成しますループが終了した後で次のサブフォルダ層
  • を使用して再帰関数を実行すると、この再帰の現在のディレクトリを親として持つすべてのファイルが取得され、すべてのファイルが移動されていたら、それは古い現在のフォルダは、それは、古いカレントディレクトリ
  • は一度それがその後、新しく作成されたディレクトリを更新、削除削除ID
  • をストリームつかむ新しいフォルダ
  • に自分のparent_path_locatorsを転送それらの上のループストリームIDを削除した元のIDに変更します。

全体の概要

にこの関数は再帰的であるためには、まず、すべてのフォルダ構造を作成し、そのが後方の作業として、それは新しい場所にすべてのファイルを転送し、元のディレクトリを一つずつ削除します。各再帰の終わりに私たちがフォルダを削除する理由は、元々のものにストリームIDを戻すことができるので、その物理的な場所以外に変更が生じていないので、 が移動されました。

関連する問題