Я пытаюсь загрузить двоичный файл в 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
Надеюсь, что это поможет, но мне, вероятно, не хватает чего-то связанного с конверсией.