Я рассматриваю возможность перевода всех баз данных моих клиентов на SQL Azure. Я использую одно поле FILESTREAM для хранения файлов в больших двоичных объектах (не для повышения производительности с большими двоичными объектами), а просто потому, что я использую Express Edition, поэтому я использую Filestream как способ не попасть в ограничение размера Express DB).
У меня есть эта таблица, поле 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], процедура полного удаления файлового потока после удаления всех столбцов файлового потока следующая:
1) Отделение таблиц от файловых групп FILESTREAM
2) Удаление файлов файловой группы FILESTREAM
3) Удаление файловых групп FIELSTREAM
(подробности см. в статье)
[1]: http://beyondrelational.com/blogs/jacob/archive/2010/03/11/completely-removing-filestream- особенности-из-sql-server-2008-database.aspx
Когда вы создаете таблицы в Azure, просто создайте их как varbinary (max) и используйте SSIS или мастер импорта / экспорта для перемещения данных.
Если вы хотите преобразовать существующую базу данных для использования собственного varbinary, вам нужно будет следовать базовой концепции, изложенной выше.