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

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

2 ответов


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

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

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


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

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


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


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

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). Он не был протестирован с типом данных image.