OPENROWSET、二进制文件、varchars 和 varbinaries

OPENROWSET、二进制文件、varchars 和 varbinaries

我试图将二进制文件上传到 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 方法?

答案1

将数据按照与字段相同的顺序排列可以使其工作(或至少看起来工作正常):

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

答案2

我自己从来没有这样做过,但是我发现这一页 显示将 jpg 插入 varbinaries 的相同过程...唯一的区别是路径名前的 N 并且没有 AS 开关

希望这有帮助,但我可能遗漏了与转换有关的内容

答案3

我不确定为什么会返回 varchar 列。看起来与msdn 中的示例

我不知道您如何转换该列。也许吧...

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

但是,当您指定SINGLE_BLOB时,我更关心它是否是varchar。

相关内容