FileTableRootPath (Transact-SQL)
傳回特定 FileTable 或目前資料庫的根層級 UNC 路徑。
語法
FileTableRootPath ( [ ‘[schema_name.]FileTable_name’ ], @option )
引數
FileTable_name
FileTable 的名稱。 FileTable_name 的類型是 nvarchar。 這是選擇性參數。 預設值為目前的資料庫。 您也可以選擇指定 schema_name。 您可以將 NULL 傳遞給 FileTable_name,使用預設參數值。@option
定義路徑之伺服器元件格式化方式的整數運算式。 @option 可具有下列其中一個值:值
說明
0
傳回轉換成 NetBIOS 格式的伺服器名稱,例如:
\\SERVERNAME\MSSQLSERVER\MyDocumentDB
這是預設值。
1
在不轉換的情況下傳回伺服器名稱,例如:
\\ServerName\MSSQLSERVER\MyDocumentDB
2
傳回完整伺服器路徑,例如:
\\ServerName.MyDomain.com\MSSQLSERVER\MyDocumentDB
傳回類型
nvarchar(4000)
當資料庫屬於 AlwaysOn 可用性群組時,FileTableRootPath 函數會傳回虛擬網路名稱 (VNN) 而非電腦名稱。
一般備註
如果下列其中一個條件成立,FileTableRootPath 函數會傳回 NULL:
FileTable_name 的值無效。
呼叫者沒有足以參考指定資料表或目前資料庫的權限。
未針對目前資料庫設定 database_directory 的 FILESTREAM 選項。
如需詳細資訊,請參閱<使用 FileTables 中的目錄與路徑>。
最佳做法
若要讓程式碼和應用程式獨立於目前的電腦和資料庫之外,請避免撰寫依賴絕對檔案路徑的程式碼。 請改為一起使用 FileTableRootPath 和 GetFileNamespacePath 函數,在執行階段取得檔案的完整路徑,如下列範例所示。 根據預設,GetFileNamespacePath 函數會傳回資料庫根路徑之下的檔案相對路徑。
USE MyDocumentDB;
@root varchar(100)
SELECT @root = FileTableRootPath();
@fullPath = varchar(1000);
SELECT @fullPath = @root + file_stream.GetFileNamespacePath()
FROM DocumentStore
WHERE Name = N’document.docx’;
安全性
權限
FileTableRootPath 函數需要:
可以取得特定 FileTable 根路徑之 FileTable 的 SELECT 權限。
db_datareader 或更高的權限,以取得目前資料庫的根路徑。
範例
下列範例示範如何呼叫 FileTableRootPath 函數。
USE MyDocumentDB;
-- returns “\\MYSERVER\MSSQLSERVER\MyDocumentDB”
SELECT FileTableRootPath();
-- returns “\\MYSERVER\MSSQLSERVER\MyDocumentDB\MyFileTable”
SELECT FileTableRootPath(N'dbo.MyFileTable');
-- returns “\\MYSERVER\MSSQLSERVER\MyDocumentDB\MyFileTable”
SELECT FileTableRootPath(N'MyFileTable');