代码之家  ›  专栏  ›  技术社区  ›  scottm

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

  •  56
  • scottm  · 技术社区  · 15 年前

    我有一个包含 image 列。

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

    CREATE TABLE Files
    (
      FileId int,
      FileData image
    )
    
    2 回复  |  直到 8 年前
        1
  •  50
  •   marc_s Anurag    8 年前

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

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

    您将有一个记录,其中filedata字段的值为6字节。


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

    在SQL Server 2005/2008中,您可能需要一个clr存储过程来执行此操作,或者需要一个扩展存储过程(除非您必须这样做,否则我会不惜一切代价避免这样做),它获取文件名,然后插入数据(或返回字节字符串,但这可能很长)。


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

        2
  •  89
  •   marc_s Anurag    11 年前

    我相信这就在附近。

    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) . 它没有用image作为数据类型进行测试。