Как я использую BCP или Studio управления SQL-сервером для вытаскивания данных BLOB из SQL-сервера?

Я сожалею, если этот вопрос уже задали, но я не мог бы найти его нигде. У меня есть таблица, которая хранит файлы как БЛОБЫ. Столбец, который содержит файл, является типом данных 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]:
11
задан Eric 8 March 2010 в 22:28
поделиться

2 ответа

Я отвечаю на свой вопрос, так как меня раздражает, что 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]:
25
ответ дан 3 December 2019 в 04:13
поделиться

Если вы можете использовать для этого код C # / .NET, может появиться следующая статья базы знаний пригодится:

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

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

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

0
ответ дан 3 December 2019 в 04:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: