我有一个SQL Server 2000,其中包含一个包含image
列的表。
如何通过指定文件的路径将文件的二进制数据插入该列?
CREATE TABLE Files
(
FileId int,
FileData image
)
答案 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身份验证连接,用于确定权限的用户是什么?如果您以管理员身份运行该服务(上帝禁止),那么您可以拥有不应允许的权限提升。