从文件流迁移到“经典” blob

从文件流迁移到“经典” blob

我正在考虑将所有客户的数据库迁移到 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,则需要遵循上面的基本概念。

  1. 添加新列 Document_temp
  2. 更新表将数据从 Document 复制到 Document_temp
  3. 删除文档列
  4. 将 document_temp 列重命名为 document。
  5. 如果不需要 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

相关内容