包含二进制文件的现有表可使用文件流

包含二进制文件的现有表可使用文件流

我有几个表想要使用文件流存储。

这些表已包含二进制数据并具有 rowguid。然而,在创建它们时,这些表并未添加到启用文件流的文件组中。

此时让这些表使用文件流的最佳方法是什么?我是否需要删除并重新创建表并迁移数据?有没有更简单的方法?

数据库已启用文件流,并且还有其他表正在使用它们。

答案1

您不需要将整个表添加到文件流文件组中,实际上您也不能这样做,因为只有文件流列才会存储在文件流存储中;同一张表中的其他列会进入普通存储。

首先,您需要选择要使用哪个文件流文件组来存储表的文件流数据:

ALTER TABLE YourTable SET (FILESTREAM_ON = FSGroup)

然后您只需将文件流列添加到表中即可:

ALTER TABLE YourTable ADD YourColumn varbinary(max) FILESTREAM

但是,如果没有这样定义,您不能改变现有的列来开始使用文件流;但您可以创建一个新列,复制数据,然后删除旧列并重命名新列:

ALTER TABLE YourTable ADD NewColumn varbinary(max) FILESTREAM
UPDATE YourTable SET NewColumn = OldColumn
ALTER TABLE YourTable DROP COLUMN OldColumn
EXEC sp_rename 'NewColumn','OldColumn','COLUMN'

相关内容