SQL Server 2012 FileTables 常用的 Functions 簡介

本文將介紹三個 SQL Server 2012 FileTables 常用的 Functions。

當您啟用 FileTables 功能後,您可以透過下列三個內建的函數來取得 FileTables 的相關資訊,分別說明如下:

這個函數用來取得 FileTables 中檔案或目錄的 UNC 路徑,例如下列的 T-SQL 敘述:

   1:  use FTDB
   2:  go
   3:   
   4:  select file_stream.GetFileNamespacePath()
   5:  from MyFileTable t

 

執行結果:

 

image

 

GetFileNamespacePath 函數接受兩個選擇性參數,第一個參數為 is_full_path ,若不指定預設為 0 ,將回傳相對的 UNC 路徑;若設定為 1 則回傳完整 UNC 路徑,例如下列的 T-SQL:

   1:  use FTDB
   2:  go
   3:   
   4:  --取得相對路徑,結果與file_stream.GetFileNamespacePath相同
   5:  select file_stream.GetFileNamespacePath(0,0)
   6:  from MyFileTable t
   7:   
   8:  --列出完整UNC路徑
   9:  select file_stream.GetFileNamespacePath(1)
  10:  from MyFileTable t

 

執行結果:

 

image

 

GetFileNamespacePath 函數的第二個參數為 @option 用來指定伺服器名稱回傳的格式,預設為 0,將回傳 NetBIOS 格式;若設定為 1 則忠實回傳原本伺服器名稱;若設定為 2 則回傳完整伺服器名稱,例如下列的 T-SQL:

   1:  --預設值
   2:  select file_stream.GetFileNamespacePath(1,0)
   3:  from MyFileTable t
   4:   
   5:  --回傳原始的伺服器名稱
   6:  select file_stream.GetFileNamespacePath(1,1)
   7:  from MyFileTable t
   8:   
   9:  --回傳完整伺服器名稱
  10:  select file_stream.GetFileNamespacePath(1,2)
  11:  from MyFileTable t

 

執行結果:

 

image

 

這個函數用來取得目前所在的資料庫或單一 FileTables 的 UNC 根目錄,使用方法如下:

   1:  use FTDB
   2:  go
   3:   
   4:  --取得目前資料庫的UNC根目錄
   5:  SELECT FileTableRootPath()

 

執行結果如下,您可以看到 FileTableRootPath 回傳的目錄名稱,是對應到您【Database Properties > Options > FILESTREAM > FILESTREAM Directory Name】。

image


您也可以利用 @option 用來指定伺服器名稱回傳的格式,使用方式跟上述的 GetFileNamespacePath 相同,例如下列的 T-SQL 敘述:

   1:  use FTDB
   2:  go
   3:   
   4:  --預設值
   5:  SELECT FileTableRootPath(N'dbo.MyFileTable',0)
   6:  --回傳原始的伺服器名稱
   7:  SELECT FileTableRootPath(N'dbo.MyFileTable',1)
   8:  --回傳完整的伺服器名稱
   9:  SELECT FileTableRootPath(N'MyFileTable',2)

 

執行結果如下:

 

image

 

建議您避免在應用程式中寫死檔案路徑,而應該使用 FileTableRootPath 取得相對應的檔案路徑,會是一個比較容易維護的作法。另外,若您已經在 SQL Server 2012 實作 AlwaysOn availability group,FileTableRootPath  回傳結果就不會是伺服器名稱,而會是虛擬網路名稱(virtual network name ; VNN)。

這個函數用來取得儲存於 FileTable 中,檔案或目錄的 path locator ID,由於必須傳入 FileTable 的命名空間路徑,因此搭配上述 FileTableRootPath  函數會是比較方便的做法。比較完整的 GetPathLocator 應用,請參考如何將資料表中所儲存的檔案中繼資料移轉至 FileTable 一文。

 

【參考資料】