Передача двоичных данных в хранимую процедуру в SQL Server 2008 - PullRequest
1 голос
/ 16 марта 2010

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

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

Когда я пытаюсь использовать команду BULK, я получаю сообщение об ошибке: «У вас нет разрешения на использование оператора массовой загрузки». Массовая утилита казалась простым способом загрузки файлов в базу данных, но без разрешений мне нужно обойтись.

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

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

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

Спасибо

Ответы [ 2 ]

1 голос
/ 18 марта 2010

Как правило, мы не передаем двоичные данные в 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
0 голосов
/ 16 марта 2010

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

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

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