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

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

Вопрос

Извините, если этот вопрос уже задавался, но я нигде не смог его найти.У меня есть таблица, в которой файлы хранятся в виде BLOBS.Столбец, содержащий файл, имеет тип данных изображения.Я хотел бы иметь возможность извлечь двоичные данные из столбца и превратить их в реальный файл.В идеале мне бы хотелось сделать это с помощью 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-байтовый префикс — на самом деле вам нужно установить для него значение 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]:
Это было полезно?

Решение

Я отвечаю на свой вопрос, так как меня раздражает, что ТАК говорит мне установить награду.

Оказывается, вам не нужен собственный флаг -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 год в ближайшее время, хранить документы в файловой системе, а указатель на них — в базе данных.Да, в этом есть свои плюсы и минусы, но на сегодняшний день именно этот путь мы выбрали во всех проектах.

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