Назад | Перейти на главную страницу

OPENROWSET, двоичные файлы, varchar и varbinary

Я пытаюсь загрузить двоичный файл в SQL Server, в поле varbinary. Я придумал для этого такой запрос:

INSERT INTO Files(File, Name)
SELECT
   "file.bin" AS Name
   * FROM OPENROWSET(BULK 'C:\file.bin', SINGLE_BLOB) AS File
GO

но я получаю эту ошибку:

Неявное преобразование типа данных varchar в varbinary (max) не допускается. Используйте функцию CONVERT для выполнения этого запроса.

Если я правильно понимаю, он читает файл как текст (varchar), а он двоичный и должен храниться как двоичный в varbinary. Боюсь, это может разрушить его в процессе, не так ли? и даже если это не так, как мне использовать метод CONVERT?

Размещение данных в том же порядке, что и поля, заставило их работать (или, по крайней мере, казалось, что они работают):

INSERT INTO Files(File, Name)
SELECT
     * FROM OPENROWSET(BULK 'C:\file.bin', SINGLE_BLOB) AS File
     "file.bin" AS Name
GO

Я не уверен, почему это возвращает столбец varchar. Выглядит так же, как пример в msdn.

Я не знаю, как бы вы преобразовали этот столбец. Может быть...

SELECT 
   convert(varbinary(max), * FROM OPENROWSET(BULK 'C:\file.bin', SINGLE_BLOB)) AS File

Но меня больше беспокоит, что это varchar, когда вы указываете SINGLE_BLOB.

Я никогда не делал этого сам, но я обнаружил эта страница показывает ту же процедуру для вставки jpg в varbinaries ... единственная разница - это N перед именем пути и отсутствие переключателя AS

Надеюсь, что это поможет, но мне, вероятно, не хватает чего-то связанного с конверсией.