如何使用简单的 insert 语句将二进制文件数据插入到二进制 SQL 字段中?

我有一个 SQLServer2000,其中一个表包含 image列。

如何通过指定文件的路径将文件的二进制数据插入到该列中?

CREATE TABLE Files
(
FileId int,
FileData image
)
126575 次浏览

如果您指的是使用文字,那么您只需创建一个二进制字符串:

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

您将拥有一条记录,该记录的 FileData 字段值为6字节。


在注释中指出只需指定文件名即可,而 SQLServer2000(或我知道的任何其他版本)不能这样做。

在 SQL Server 2005/2008中,需要一个 CLR 存储过程或者一个扩展存储过程(但是我会不惜一切代价避免这种情况,除非你必须这样做) ,它接受文件名,然后插入数据(或者返回字节字符串,但是这可能相当长)。


关于只能从 SP/query 获取数据的问题,我想答案是肯定的,因为如果你给 SQL Server 从文件系统中读取文件的能力,当你没有通过 Windows Authentication 连接时,你会怎么做,什么用户被用来确定权限?如果您以管理员的身份运行服务(但愿不是这样) ,那么您可能会有不允许的权限升级。

应该就在附近。

INSERT INTO Files
(FileId, FileData)
SELECT 1, * FROM OPENROWSET(BULK N'C:\Image.jpg', SINGLE_BLOB) rs

需要注意的是,上面的命令在 SQLServer2005和 SQLServer2008中运行,数据类型为 varbinary(max)。没有用图像作为数据类型进行测试。