Передача двоичных данных в хранимую процедуру в SQL Server 2008

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

Вопрос

Я пытаюсь придумать способ хранения файлов в базе данных.Я знаю, что рекомендуется хранить файлы в файловой системе, а не в базе данных, но работа, над которой я работаю, настоятельно рекомендовала бы использовать базу данных для хранения этих изображений (файлов).

Существуют также некоторые ограничения.Я не являюсь администратором, и мне нужно создать хранимые процедуры для выполнения всех команд.До сих пор это не представляло особой сложности, но я ни за что на свете не смогу найти способ сохранить файл (изображение) в базе данных.

Когда я пытаюсь использовать МАССОВУЮ команду, я получаю сообщение об ошибке "У вас нет разрешения на использование инструкции bulk load". Массовая утилита казалась простым способом загрузки файлов в базу данных, но без разрешений мне приходится искать обходной путь.

Я решил использовать HTML-форму с типом ввода для загрузки файла и обработать ее с помощью PHP.PHP вызывает хранимую процедуру и передает содержимое файла.Проблема в том, что теперь он говорит, что максимальная длина параметра может составлять только 128 символов.

Теперь я окончательно застрял.У меня нет разрешений на использование команды bulk, и похоже, что максимальная длина параметра, который я могу передать SP, составляет 128 символов.

Я ожидал столкнуться с проблемами, потому что двоичные символы и символы ascii плохо сочетаются друг с другом, но я в тупике...

Спасибо

Это было полезно?

Решение

Вот пример, который я нашел в блоге Дэвида Хейдена.

Это пример на c #, но шаги должны быть аналогичны в PHP:

  1. Преобразуйте загруженный файл в массив байтов
  2. Выполнить динамический TSQL на сервере

Другие советы

Как правило, мы не передаем двоичные данные в SQL.Мы загружаем файл на сервер, затем загружаем изображение с сервера в базу данных.

Загрузите изображение в базу данных из файла:

UPDATE images
SET image = LOAD_FILE('images/myimage.jpg')
WHERE image_id = 1234

Верните изображение обратно в файл:

SELECT image
INTO DUMPFILE 'images/myimage.jpg'
FROM images
WHERE image_id = 1234
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top