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

时间:2009-07-13 16:47:58

标签: sql-server tsql sql-server-2000

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

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

CREATE TABLE Files
(
  FileId int,
  FileData image
)

2 个答案:

答案 0 :(得分:91)

我相信这会很接近。

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

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

答案 1 :(得分:51)

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

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

你将拥有一个FileData字段的六字节值的记录。


您在评论中指出您只想指定文件名,而您无法使用SQL Server 2000(或我所知道的任何其他版本)。

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


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