带有二进制文件的现有表以使用文件流

use*_*487 3 filestream sql-server sql-server-2008

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

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

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

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

Mas*_*imo 7

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

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

ALTER TABLE YourTable SET (FILESTREAM_ON = FSGroup)
Run Code Online (Sandbox Code Playgroud)

然后您可以简单地将文件流列添加到表中:

ALTER TABLE YourTable ADD YourColumn varbinary(max) FILESTREAM
Run Code Online (Sandbox Code Playgroud)

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

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'
Run Code Online (Sandbox Code Playgroud)