Как я могу вставить данные двоичного файла в двоичное поле SQL с помощью простого оператора вставки? - PullRequest
57 голосов
/ 13 июля 2009

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

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

CREATE TABLE Files
(
  FileId int,
  FileData image
)

Ответы [ 2 ]

92 голосов
/ 17 января 2011

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

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

51 голосов
/ 13 июля 2009

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

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

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


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

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


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

...