Ответ 1
Я бы написал proc (или запрос, см. ниже), чтобы экспортировать двоичный файл в файловую систему, а затем использовать любую старую утилиту управления фотографиями на полке (например, Windows Photo Viewer), чтобы принять Посмотрите, что внутри.
Если ваш умный в названии файла вы можете дать себе достаточно информации о каждом изображении в названии, чтобы быстро найти его в базе данных снова, как только вы наглядно найдете то, что ищете.
Вот proc, который будет экспортировать двоичный файл в файловую систему. Я изменил из этот примерный код. Он непроверен, но должен быть предельно близок к концепции. Он использует BCP для экспорта вашего двоичного кода. Проверьте здесь полные документы в утилите BCP.
Прок также дает вам возможность экспортировать все в таблицу или только одну строку на основе переданного ключевого ключа. Он использует курсор (yuck), а также некоторый динамический sql (yuck, yuck), но иногда вы должны делать то, что должны делать.
CREATE PROCEDURE ExportMyImageFiles
(
@PriKey INT,
@OutputFilePath VARCHAR(500)
)
AS
BEGIN
DECLARE @sql VARCHAR(8000)
IF @PriKey IS NULL /* export all images */
BEGIN
DECLARE curExportBinaryImgs CURSOR FAST_FORWARD FOR
SELECT 'BCP "SELECT MyImage FROM [dbo].[MyTable]
WHERE PrimaryKey =' + CAST(PrimaryKey AS VARCHAR(25)) +
'" queryout ' + @OutputFilePath + MyImageName + '.' +
MyImageType + ' -S MyServer\MyInstance -T -fC:\Documents.fmt'
FROM [dbo].[MyTable]
OPEN curExportBinaryImgs
FETCH NEXT FROM curExportBinaryImgs INTO @sql
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC xp_cmdshell @sql, NO_OUTPUT
FETCH NEXT FROM curExportBinaryImgs INTO @sql
END
CLOSE curExportBinaryImgs
DEALLOCATE curExportBinaryImgs
END
ELSE /* Export only the primary key provided */
BEGIN
SELECT @sql = 'BCP "SELECT MyImage FROM [dbo].[MyTable]
WHERE PrimaryKey =' + CAST(PrimaryKey AS VARCHAR(25)) +
'" queryout ' + @OutputFilePath
+ MyImageName + '.' + MyImageType +
' -S MyServer\MyInstance -T -fC:\Documents.fmt'
FROM [dbo].[MyTable]
WHERE PrimaryKey = @PriKey
EXEC xp_cmdshell @sql,NO_OUTPUT
END
END
Это все, конечно, предполагает, что то, что хранится в столбце "Изображение", на самом деле является изображением, а не другим типом файла. Надеюсь, если это изображение, вы также знаете тип, bmp, jpg, png, gif и т.д.
Если вы не хотите, чтобы hassle или reusability полностью обработанного proc попробовали один запрос, например:
DECLARE @OutputFilePath VarChar(500) = /* put output dir here */
DECLARE @sql VARCHAR(8000)
DECLARE curExportBinaryImgs CURSOR FAST_FORWARD FOR
SELECT 'BCP "SELECT MyImage FROM [dbo].[MyTable]
WHERE PrimaryKey =' + CAST(PrimaryKey AS VARCHAR(25)) +
'" queryout ' + @OutputFilePath + MyImageName + '.' +
MyImageType + ' -S MyServer\MyInstance -T -fC:\Documents.fmt'
FROM [dbo].[MyTable]
OPEN curExportBinaryImgs
FETCH NEXT FROM curExportBinaryImgs INTO @sql
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC xp_cmdshell @sql, NO_OUTPUT
FETCH NEXT FROM curExportBinaryImgs INTO @sql
END
CLOSE curExportBinaryImgs
DEALLOCATE curExportBinaryImgs