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

sco*_*ttm 60 t-sql sql-server sql-server-2000

我有一个SQL Server 2000,其中包含一个包含image列的表.

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

CREATE TABLE Files
(
  FileId int,
  FileData image
)
Run Code Online (Sandbox Code Playgroud)

小智 98

我相信这会很接近.

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

需要注意的是,上面的内容在SQL Server 2005和SQL Server 2008中运行,数据类型为varbinary(max).没有使用图像作为数据类型进行测试.

  • 注意:这对所有人来说都是显而易见的(除了我),但文件路径似乎需要存在于实际的数据库主机上.如果文件存储在远程计算机上,则会遇到以下错误:无法批量加载,因为无法打开文件"..". (22认同)

cas*_*One 54

如果您的意思是使用文字,则只需创建二进制字符串:

insert into Files (FileId, FileData) values (1, 0x010203040506)
Run Code Online (Sandbox Code Playgroud)

并且您将拥有FileData字段的六字节值记录.


您在注释中指出您只想指定文件名,而不能使用SQL Server 2000(或我所知道的任何其他版本).

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


关于只能从SP /查询中获取数据的问题,我会说答案是肯定的,因为如果你让SQL Server能够从文件系统中读取文件,那么当你没有时,你会怎么做?通过Windows身份验证连接,用户用什么来确定权限?如果您以管理员身份运行该服务(上帝禁止),那么您可以拥有不应允许的权限提升.