Как выгрузить все наши изображения из поля VARBINARY (MAX) в SQL Server 2008 в файловую систему?

StackOverflow https://stackoverflow.com/questions/613154

Вопрос

У меня есть таблица, в которой есть IDENTITY поле и VARBINARY(MAX) поле в нем.Есть ли какой-нибудь способ, которым я мог бы удалить содержимое каждого VARBINARY(MAX) поле для файловая система (например. c:\temp\images)?

Схема таблицы:

PhotoId INTEGER NOT NULL IDENTITY
Image VARBINARY(MAX) NOT NULL
DateCreated SMALLDATETIME

Выходной сигнал:

c:\temp\images\1.png
c:\temp\images\2.png
c:\temp\images\3.png
... etc...

Как лучше всего подойти к этому?

Это было полезно?

Решение

Я понял это благодаря этот пост ...

SET NOCOUNT ON

DECLARE @IdThumbnail INTEGER,
        @MimeType VARCHAR(100),
        @FileName VARCHAR(200),
        @Sqlstmt varchar(4000)


DECLARE Cursor_Image CURSOR FOR
    SELECT a.IdThumbnail
    FROM tblThumbnail a
    ORDER BY a.IdThumbnail

OPEN Cursor_Image
    FETCH NEXT FROM Cursor_Image INTO @IdThumbnail

    WHILE @@FETCH_STATUS = 0
    BEGIN

        -- Generate the file name based upon the ID and the MIMETYPE.
        SELECT @FileName = LTRIM(STR(@IdThumbnail)) + '.png'

        -- Framing DynamicSQL for XP_CMDshell            
        SET @Sqlstmt='BCP "SELECT OriginalImage 
                      FROM Appian.dbo.tblThumbnail 
                      WHERE IdThumbnail = ' + LTRIM(STR(@IdThumbnail)) +
                      '" QUERYOUT c:\Temp\Images\' + LTRIM(@FileName) + 
                      ' -T -fC:\Temp\ImageFormatFile.txt'
        print @FileName
        print @sqlstmt

        EXEC xp_cmdshell @sqlstmt
        FETCH NEXT FROM Cursor_Image INTO @IdThumbnail
    END

CLOSE Cursor_Image
DEALLOCATE Cursor_Image

Пожалуйста, обратите внимание -> у вас должен быть файл формата для команды BCP.Это содержимое файла, и я поместил его в c: emp (как указано в командной строке BCP выше).

10.0
1
1       SQLIMAGE            0       0       ""   1     OriginalImage                      ""

Последнее замечание об этом файле формата ..ПОСЛЕ ПОСЛЕДНЕЙ СТРОКИ ДОЛЖНА БЫТЬ НОВАЯ СТРОКА.в противном случае вы получите сообщение об ошибке.

Наслаждайтесь!

Другие советы

Самым простым (для меня) было бы написать небольшое приложение .NET, которое выгружало бы поля varbinary в файл.

Если вы против работы в .NET, вы должны (я не проверял это) иметь возможность создать новый столбец типа " VARBINARY (MAX) FILESTREAM " ;. Убедитесь, что у вас также есть соответствующий "ROWGUIDCOL" колонка. Тогда вы можете (теоретически) сделать что-то вроде:

ОБНОВЛЕНИЕ таблицы SET varfilestream_col = varbinary_col

Надеюсь, что это работает для вас.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top