想透過網芳上傳檔案到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的支援程度。
參考:
FileTableRootPath (Transact-SQL)