web-dev-qa-db-ja.com

そのリテラルパスによってサブフォルダーのSQL Serverファイルテーブルパスロケーターを取得する方法

私はいくつかのサブテーブルを持つファイルテーブルを持っています。

例えば

FileTable
->subtable1
->->subtable1.1
->->subtable1.2
->subtable2
->subtable3

SQL Serverの入手方法path_locatorは '/subtable1/subtable1.1'のようなものによって与えられたサブテーブルのために?

ルートからサブフォルダにファイルを移動するために必要です。私はこれを試しましたが、うまくいきません

declare @parent hierarchyid;
set @parent = GetPathLocator('folder2/folder2.1')

update physical_files set path_locator = @parent.GetDescendant(NULL, NULL)
where stream_id = '494D5C8B-AC22-E411-A464-00259060BBB9';

SQL Server 2012レポート:

メッセージ33423、レベル16、状態1
FileTableのパス名または形式が無効です。

1

解決策を見つけました。これは、ファイルテーブル名が「physical_files」、ターゲットパスが「folder1」、ターゲットファイルがstream_id = 'FF9CF452-B522-E411-A464-00259060BBB9'の例です。

declare @path varchar(MAX);
set @path = '\folder';

declare @parent hierarchyid;
set @parent = GetPathLocator(CONCAT(FileTableRootPath('dbo.physical_files'), @path));
select @parent

update physical_files set path_locator = @parent.GetDescendant(NULL, NULL)
where stream_id = 'FF9CF452-B522-E411-A464-00259060BBB9';
2