Как использовать BCP или SQL Server Management Studio для получения данных BLOB из Sql Server?

извините, если этот вопрос уже задан, но я нигде не мог его найти. У меня есть таблица, которая хранит файлы в BLOB. Столбец, содержащий файл, является типом данных image. Я хотел бы иметь возможность извлечь двоичные данные из столбца и превратить его в фактический файл. В идеале я хотел бы сделать это с помощью BCP или management studio, Если это возможно.

Я пробовал BCP, но по какой-то причине, когда я пытаюсь вытащить документ office 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 - байтовый префикс по умолчанию в столбец изображения-вы действительно хотите, чтобы этот набор равнялся 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]:

2 ответов


я отвечаю на свой собственный вопрос, так как я раздражаюсь, поэтому говорю мне настроить щедрость

оказывается, вам не нужен собственный флаг-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 для этого, может пригодиться следующая статья KB:

http://support.microsoft.com/kb/317016

по-видимому, вы можете сделать что-то подобное с BCP и файлом формата, но IIRC файл формата должен быть предварительно заполнен точным количеством байтов, которое он ожидает вытащить из столбца, что делает его довольно непрактичным.

другой вариант, который вы можете выбрать, - использовать FILESTREAM в 2008 году или, если вы не планируйте в ближайшее время переходить на 2008 год, храните документы в файловой системе и указатель на них в базе данных. Да есть плюсы и минусы в этом, но это путь, который мы выбрали во всех проектах на сегодняшний день.