Передача двоичных данных в хранимую процедуру в SQL Server 2008
-
20-09-2019 - |
Вопрос
Я пытаюсь придумать способ хранения файлов в базе данных.Я знаю, что рекомендуется хранить файлы в файловой системе, а не в базе данных, но работа, над которой я работаю, настоятельно рекомендовала бы использовать базу данных для хранения этих изображений (файлов).
Существуют также некоторые ограничения.Я не являюсь администратором, и мне нужно создать хранимые процедуры для выполнения всех команд.До сих пор это не представляло особой сложности, но я ни за что на свете не смогу найти способ сохранить файл (изображение) в базе данных.
Когда я пытаюсь использовать МАССОВУЮ команду, я получаю сообщение об ошибке "У вас нет разрешения на использование инструкции bulk load". Массовая утилита казалась простым способом загрузки файлов в базу данных, но без разрешений мне приходится искать обходной путь.
Я решил использовать HTML-форму с типом ввода для загрузки файла и обработать ее с помощью PHP.PHP вызывает хранимую процедуру и передает содержимое файла.Проблема в том, что теперь он говорит, что максимальная длина параметра может составлять только 128 символов.
Теперь я окончательно застрял.У меня нет разрешений на использование команды bulk, и похоже, что максимальная длина параметра, который я могу передать SP, составляет 128 символов.
Я ожидал столкнуться с проблемами, потому что двоичные символы и символы ascii плохо сочетаются друг с другом, но я в тупике...
Спасибо
Решение
Вот пример, который я нашел в блоге Дэвида Хейдена.
Это пример на c #, но шаги должны быть аналогичны в PHP:
- Преобразуйте загруженный файл в массив байтов
- Выполнить динамический 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