我正在考虑将所有客户的数据库迁移到 SQL Azure。我使用单个 FILESTREAM 字段将文件存储在 blob 中(不是为了提高大 blob 的性能),而只是因为我使用的是 Express 版本,因此我使用 Filestream 来避免达到 Express 数据库大小限制)。
我有这张表,DOCUMENT 字段包含文件流数据,并且 GUID 字段是文件流实现所必需的:
CREATE TABLE [dbo].[DOC_FILES](
[ID_DOC_FILE] [int] NOT NULL,
[DOCUMENT] [varbinary](max) FILESTREAM NULL,
[GUID] [uniqueidentifier] ROWGUIDCOL NOT NULL
CONSTRAINT [PK_DOC_FILES] PRIMARY KEY CLUSTERED
(
[ID_DOC_FILE] ASC
) ON [PRIMARY] FILESTREAM_ON [MyFileStreamFileGroup],
UNIQUE NONCLUSTERED
(
[GUID] ASC
) ON [PRIMARY]
) ON [PRIMARY] FILESTREAM_ON [MyFileStreamFileGroup]
如何以最佳方式删除文件流?
我想到的一个技巧很简单:
1)将 DOCUMENT 字段重命名为 DOCUMENT_TEMP
2)创建一个新的 DOCUMENT(不是 FILESTREAM)varbinary(max)字段
3)从DOCUMENT_TEMP逐个复制并删除到DOCUMENT
4)修改表格以删除文件流[这对我来说不清楚]
您能建议一下吗?
答案1
在 Azure 中创建表时,只需将它们创建为 varbinary(max),然后使用 SSIS 或导入/导出向导来移动数据。
如果您想将现有数据库转换为使用本机 varbinary,则需要遵循上面的基本概念。
- 添加新列 Document_temp
- 更新表将数据从 Document 复制到 Document_temp
- 删除文档列
- 将 document_temp 列重命名为 document。
- 如果不需要 Guid,请将其删除(保留它也没有坏处)。
答案2
如[此处][1]所述,删除所有文件流列后完全删除文件流的步骤如下:
1) 将表与 FILESTREAM 文件组分离
2)删除 FILESTREAM 文件组文件
3) 删除 FIELSTREAM 文件组
(详情见文章)
[1]:http://beyondrelational.com/blogs/jacob/archive/2010/03/11/completely-removing-filestream-来自 SQL 服务器 2008 数据库的功能.aspx