2010-05-19 52 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