[SQL Server]上傳檔案到SQL Server資料庫(FileTable)

想透過網芳上傳檔案到sql server機器再從sql table取得目錄資訊,則可以考慮SQL Server 2012推出的File table。

繼續延伸上傳檔案到SQL Server筆記: SQL Server 2012的新功能File table。

FileTable也必須啟用filestream,前置設定條件可以參考這篇filestream步驟1-3,將組態及檔案群組等設定完成。

 

4.開啟FILESTREAM目錄

USE [master]
GO
ALTER DATABASE [DEMO] SET FILESTREAM( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'FileTable' ) WITH NO_WAIT
GO

設定完成後,觀察資料庫屬性:

資料庫復原模式:Simple

FILESTREAM目錄名稱: FileTable

非交易式存取:FULL

 

5.建立FILETABLE類型的資料表

CREATE TABLE dbo.DocumentTable AS FILETABLE
  WITH
  (
    FILETABLE_DIRECTORY = 'DocumentTable',
    FILETABLE_COLLATE_FILENAME = database_default
  )
GO

6.透過網路芳鄰存取Filetable資料夾

\\192.168.120.91\mssqlserver\FileTable\DocumentTable 路徑拆解:

  • 192.168.120.91: 資料庫ip
  • MSSQLSERVER: 組態管理員Instance內容所定義的共用名稱:

  • FileTable: 資料庫層級所定義的資料夾名稱
  • DocumentTable: 資料表層級所定義的資料夾名稱

7.放2個檔案到此分享資料夾

8.下SELECT查詢DocumentTable資料表

出現兩筆紀錄

9.下T-SQL刪除第二個圖檔1.png

DELETE DocumentTable
  WHERE NAME = '1.PNG'

資料表少了1筆

但分享資料夾卻還是存在1.png,不過過幾分鐘就消失了,似乎是非同步的方式來刪實體檔案!

(後來手動執行checkpoint強制寫log,因為復原模式simple會自動truncate log ,發現檔案馬上就刪除了。)

10.換個方式,從分享資料夾把檔案都刪除!

重新下SELECT * FROM

11.最後來試試看怎麼從table name回查路徑:

A:使用T-SQL指令

SELECT FileTableRootPath('dbo.DocumentTable') as RootPath

B:使用管理工具介面,瀏覽FileTable目錄。

管理非結構化資料越來越方便了!

3年前公司請來微軟的顧問介紹SQL Server 2012,一直想試,可惡。

 

小結:

  • 試著在資料庫本機用檔案名稱azure1.png搜尋檔案,但卻找不到,必須使用分享名稱或是對應的序號。
  • 需要注意File Table在Alwayson的支援程度。

 

參考:

FileTable(SQL Server)

利用 Transact-SQL 存取 FileTable

FileTableRootPath (Transact-SQL)