2010-09-06 118 views
2

我需要从庞大的数据库中创建一个测试数据库,其中大部分数据都包含在文件流数据中。如何将所有文件流varbinary(max)字段设置为NULL?

我需要测试不是文件流相关的数据,所以我想要做的是删除varbinary(max)信息。

这些都是我在FILE_REPOSITORY_TABLE表中的字段:

[ID_FILE] [int] NOT NULL, 
[FILE_DATA] [varbinary](max) FILESTREAM NULL, 
[GUID] [uniqueidentifier] ROWGUIDCOL NOT NULL 

我试图做的是

Update FILE_REPOSITORY_TABLE 
SET FILE = NULL 

我期待这太删除的文件,但它并没有发生。

我无法删除记录,因为ID_FILE有FK链接。 (当从包含文件流数据的表中删除记录时,相关文件也被删除)。无论如何,我也尝试做一个备份,但是文件大小很大,即使这个表是满了NULL。

我该怎么办?

最后说明:我的目标是拥有500MB的备份而不是10GB的备份(我拥有9.5GB的文档)。这仅用于测试目的。

回答

4

文件数据通过垃圾回收进程回收,而不是立即删除。 Related blog post,所以你可能需要强制检查点发生。

+0

是......垃圾回收器......我试着用CHECKPOINT和CHECKPOINT 100(强制检查点在100秒内发生)。但没有运气。垃圾收集器似乎按照自己的步调进行......我仔细点击FIlestream文件夹并阅读文件数量(属性中),每几秒钟将删除几个文档。无论如何感谢您的答案,我会再问一个更具体的答案:http://stackoverflow.com/questions/3650387/how-to-force-the-filestream-garbage-collector-to-complete-its-work- with-the-highe – LaBracca 2010-09-06 09:37:40

+0

附加说明:我接受这个答案是因为它帮助我了解问题与垃圾收集器有关。 – LaBracca 2010-09-06 09:38:58