为什么改变FILESTREAM列不会使重复的文件系统数据无效?

时间:2016-04-20 12:41:17

标签: sql sqlfilestream

我有一个表,它将文件数据保存在varbinary(max)列中,并且在将其转换为使用FILESTREAM列的中间位置,以便将数据保存在文件系统中。

作为其中的一部分,我有一个SQL更新脚本,它添加了新的FILESTREAM列:

ALTER TABLE [dbo].[File] ADD [Data] VARBINARY(MAX) FILESTREAM NULL

然后我将旧文件数据迁移到新的数据列。这会将文件数据保存到磁盘,其大小例如为20GB。

然后我改变了列,使其不为空

ALTER TABLE [dbo].[File] ALTER COLUMN [Data] VARBINARY(MAX) FILESTREAM NOT NULL

但是这会在磁盘上创建一个新的文件流数据副本(在文件组位置的新文件夹中),留下另外20GB的副本。

我很好奇为什么改变列的行为不为null重复数据?它是有意义的,如果它是一个新列,因此数据被复制,但其他一切保持不变,只是复制现有数据没有意义 - 更不用说这样做20GB的文件所需的时间。

我可以更改列添加以具有默认值,这不会导致重复:

ALTER TABLE [dbo].[File] ADD [Data] VARBINARY(MAX) FILESTREAM NOT NULL DEFAULT(0x0)

然后

ALTER TABLE [dbo].[File] ADD [Data] VARBINARY(MAX) FILESTREAM NOT NULL

但我很好奇为什么会这样。

0 个答案:

没有答案