2010-05-19 49 views
1

我做的FILESTREAM調查(上計算器要求在閱讀白皮書和谷歌搜索),在我目前screnario文件以這種方式管理exisitng文件:如何插入存儲在SQL Server FILESTREAM的存儲NFTS

1 )我有一個數據庫表,我保留文檔ID和文檔路徑(如\ fileserver \ DocumentRepository \ file000000001.pdf)

2)我有一個文檔文件夾(\ fileserver \ DocumentRepository)我在那裏存儲文檔

當然,我需要這個更改爲varbinary(最大值)/ FILESTREAM存儲。

什麼是執行此任務的最佳方法是什麼?

是否可以說「\文件服務器\的DocumentRepository \ file000000001.pdf」被指派爲varbinary(最大值)字段或我必須明確地將其插入?所以不知何故告訴varbinary(max)字段:「現在你是一個指向現有文檔的指針」。

回答

2

不能將現有的文件分配爲varbinary(最大值)/ FILESTREAM值。你必須明確地插入它。這就是說,如果由於某種原因,這不是你的選擇(例如,你不能複製大量的數據或複製時會遇到磁盤空間問題),有一些黑客可以進行遷移0拷貝。訣竅將執行以下步驟:

  1. 將數據庫切換到簡單恢復模式。
  2. 爲您即將遷移的所有文件插入佔位符文件流文件。插入時,使用varbinary值0x。在插入時,收集(文檔id /文件路徑)=>(文件流文件名)對。
  3. 停止Sql Server。
  4. 覆蓋與真實文件空FILESTREAM文件(使用移動/硬鏈接,以避免數據複製)。
  5. 啓動Sql Server,執行一些健全性檢查(DBCC)並啓動新的備份鏈。

很明顯,不建議使用這個技巧,容易做的數據庫損壞。 :)

+0

是完美的。現在我做了一些測試,我認爲對我來說檢查可用磁盤空間和「複製」文檔,或者一次插入和刪除一個更好。你所暗示的黑客正是我的問題的答案,無論如何,因爲它是一個真正的黑客它不適合我。非常感謝。 – LaBracca 2010-05-20 09:25:50