Я сожалею, если этот вопрос уже задали, но я не мог бы найти его нигде. У меня есть таблица, которая хранит файлы как БЛОБЫ. Столбец, который содержит файл, является типом данных image. Я хотел бы иметь возможность извлечь двоичные данные из столбца и возвратить его в фактический файл. Я идеально хотел бы иметь возможность сделать это с BCP или студией управления, если это возможно.
Я попробовал BCP, но по некоторым причинам когда я пытаюсь вытащить офисный документ, Word думает, что это повреждено. Вот то, что я попробовал до сих пор (очевидно, значения были изменены для защиты невинного:):
bcp "select document_binary_data from database where id = 12345" queryout "c:\filename.doc" -n -S server -U username -P password
Это не работает хотя? Какие-либо мысли?
Редактирование Оказывается, что Вам не нужен-n собственный флаг. Кроме того, BCP пытается включать 4-байтовый префикс по умолчанию в столбец типа image - Вы на самом деле хотите этот набор к 0.
bcp "select document_binary_data from database where id = 12345" queryout "c:\filename.doc" -S server -U username -P password
Enter the file storage type of field document_binary [image]: Enter prefix-length of field document_binary [4]: 0 Enter length of field document_binary [0]: Enter field terminator [none]:
Я отвечаю на свой вопрос, так как меня раздражает, что SO говорит мне установить награду
Оказывается, вам не нужен родной флаг -n. Кроме того, BCP пытается включить по умолчанию 4-байтовый префикс в столбец изображения - вы действительно хотите, чтобы это значение было равно 0.
bcp "select document_binary_data from database where id = 12345" queryout "c:\filename.doc" -S server -U username -P password
Enter the file storage type of field document_binary [image]: Enter prefix-length of field document_binary [4]: 0 Enter length of field document_binary [0]: Enter field terminator [none]:
Если вы можете использовать для этого код C # / .NET, может появиться следующая статья базы знаний пригодится:
http://support.microsoft.com/kb/317016
По-видимому, вы можете сделать что-то подобное с BCP и файлом формата, но IIRC файл формата должен быть предварительно заполнен точным количество байтов, которое предполагается извлечь из столбца, что делает его непрактичным.
Другой вариант, который вы можете выбрать, - использовать FILESTREAM в 2008 году или, если вы не планируете в ближайшее время переходить на 2008 год, сохранить документы в файловой системе и указатель на них в базе данных. Да, у этого есть свои плюсы и минусы, но на сегодняшний день мы выбрали именно такой путь во всех проектах.