本文將介紹三個 SQL Server 2012 FileTables 常用的 Functions。
當您啟用 FileTables 功能後,您可以透過下列三個內建的函數來取得 FileTables 的相關資訊,分別說明如下:
這個函數用來取得 FileTables 中檔案或目錄的 UNC 路徑,例如下列的 T-SQL 敘述:
1: use FTDB2: go3:
4: select file_stream.GetFileNamespacePath()5: from MyFileTable t
執行結果:
GetFileNamespacePath 函數接受兩個選擇性參數,第一個參數為 is_full_path ,若不指定預設為 0 ,將回傳相對的 UNC 路徑;若設定為 1 則回傳完整 UNC 路徑,例如下列的 T-SQL:
1: use FTDB2: go3:
4: --取得相對路徑,結果與file_stream.GetFileNamespacePath相同
5: select file_stream.GetFileNamespacePath(0,0)6: from MyFileTable t7:
8: --列出完整UNC路徑
9: select file_stream.GetFileNamespacePath(1)10: from MyFileTable t
執行結果:
GetFileNamespacePath 函數的第二個參數為 @option 用來指定伺服器名稱回傳的格式,預設為 0,將回傳 NetBIOS 格式;若設定為 1 則忠實回傳原本伺服器名稱;若設定為 2 則回傳完整伺服器名稱,例如下列的 T-SQL:
1: --預設值
2: select file_stream.GetFileNamespacePath(1,0)3: from MyFileTable t4:
5: --回傳原始的伺服器名稱
6: select file_stream.GetFileNamespacePath(1,1)7: from MyFileTable t8:
9: --回傳完整伺服器名稱
10: select file_stream.GetFileNamespacePath(1,2)11: from MyFileTable t
執行結果:
這個函數用來取得目前所在的資料庫或單一 FileTables 的 UNC 根目錄,使用方法如下:
1: use FTDB2: go3:
4: --取得目前資料庫的UNC根目錄
5: SELECT FileTableRootPath()
執行結果如下,您可以看到 FileTableRootPath 回傳的目錄名稱,是對應到您【Database Properties > Options > FILESTREAM > FILESTREAM Directory Name】。
您也可以利用 @option 用來指定伺服器名稱回傳的格式,使用方式跟上述的 GetFileNamespacePath 相同,例如下列的 T-SQL 敘述:1: use FTDB2: go3:
4: --預設值
5: SELECT FileTableRootPath(N'dbo.MyFileTable',0)6: --回傳原始的伺服器名稱
7: SELECT FileTableRootPath(N'dbo.MyFileTable',1)8: --回傳完整的伺服器名稱
9: SELECT FileTableRootPath(N'MyFileTable',2)
執行結果如下:
建議您避免在應用程式中寫死檔案路徑,而應該使用 FileTableRootPath 取得相對應的檔案路徑,會是一個比較容易維護的作法。另外,若您已經在 SQL Server 2012 實作 AlwaysOn availability group,FileTableRootPath 回傳結果就不會是伺服器名稱,而會是虛擬網路名稱(virtual network name ; VNN)。
這個函數用來取得儲存於 FileTable 中,檔案或目錄的 path locator ID,由於必須傳入 FileTable 的命名空間路徑,因此搭配上述 FileTableRootPath 函數會是比較方便的做法。比較完整的 GetPathLocator 應用,請參考如何將資料表中所儲存的檔案中繼資料移轉至 FileTable 一文。
【參考資料】