Подтвердить что ты не робот

Как я могу вставить двоичные данные файла в двоичное поле SQL, используя простой оператор insert?

У меня есть SQL Server 2000 с таблицей, содержащей столбец image.

Как вставить двоичные данные файла в этот столбец, указав путь к файлу?

CREATE TABLE Files
(
  FileId int,
  FileData image
)
4b9b3361

Ответ 1

Если вы имеете в виду использование литерала, вам просто нужно создать двоичную строку:

insert into Files (FileId, FileData) values (1, 0x010203040506)

И у вас будет запись с шестибайтовым значением для поля FileData.


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

Вам понадобится хранимая процедура CLR для этого в SQL Server 2005/2008 или расширенная хранимая процедура (но я бы избегал этого любой ценой, если вам не нужно), которая принимает имя файла, а затем вставляет данные (или возвращает байтовую строку, но это может быть довольно длинным).


Что касается вопроса о возможности получения данных из SP/запроса, я бы сказал, что ответ "да", потому что если вы дадите SQL Server возможность читать файлы из файловой системы, что вы будете делать, когда вы не подключены через проверку подлинности Windows, какой пользователь используется для определения прав? Если вы используете службу в качестве администратора (не дай бог), вы можете иметь возвышение прав, которые не должны быть разрешены.

Ответ 2

Я считаю, что это будет где-то близко.

INSERT INTO Files
(FileId, FileData)
SELECT 1, * FROM OPENROWSET(BULK N'C:\Image.jpg', SINGLE_BLOB) rs

Что-то примечание, приведенное выше работает в SQL Server 2005 и SQL Server 2008 с типом данных как varbinary(max). Он не тестировался с изображением как тип данных.