You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在SQL Server中插入PDF或图片并填充多列数据

在SQL Server中同时插入varbinary数据与其他列值

没问题,我来帮你搞定这个问题!你已经找对了用OPENROWSET(BULK...)读取本地文件到varbinary(max)列的核心方法,只需要调整INSERT语句的写法,就能一次性填充所有列的数据了。

基础写法:单条数据插入

首先确保你的表结构正确(如果还没创建的话),然后在插入时明确指定目标列名,再在SELECT子句中按顺序给出每个列对应的值——BulkColumn对应二进制列,其他列直接写固定值或用函数生成:

-- 创建测试表(如果不存在)
CREATE TABLE testVarBinary (
    description nchar(10),
    img varbinary(max),
    [date] datetime, -- 注意:date是SQL关键字,用方括号避免语法冲突
    column4 nvarchar(50),
    column5 int,
    column6 bit
);

-- 插入带完整列数据的记录
INSERT INTO testVarBinary (description, img, [date], column4, column5, column6)
SELECT 
    N'测试文档', -- description列的Unicode值(加N前缀)
    BulkColumn, -- 从本地文件读取的二进制数据
    GETDATE(), -- 用当前时间填充date列
    N'产品手册',
    202405,
    1
FROM OPENROWSET (
    BULK 'D:\TestFiles\sample.pdf', -- 替换成你的文件绝对路径
    SINGLE_BLOB -- 以单块二进制形式读取文件
) AS img_source;

批量插入多条文件

如果需要一次性插入多个文件,每个文件对应不同的描述、日期等信息,可以用UNION ALL拼接多个OPENROWSET的结果:

INSERT INTO testVarBinary (description, img, [date], column4, column5, column6)
-- 第一条记录
SELECT N'封面图', BulkColumn, '2024-05-20', N'图片类', 101, 0
FROM OPENROWSET(BULK 'D:\TestFiles\cover.png', SINGLE_BLOB) AS img1
UNION ALL
-- 第二条记录
SELECT N'说明书', BulkColumn, '2024-05-21', N'文档类', 102, 1
FROM OPENROWSET(BULK 'D:\TestFiles\guide.pdf', SINGLE_BLOB) AS img2;

几个关键注意事项

  • 文件权限:SQL Server的服务账号(比如NT SERVICE\MSSQLSERVER)需要有你指定文件路径的读取权限,否则会报权限错误。
  • 路径格式:必须使用绝对路径,不能用相对路径。
  • 字符类型nchar(10)是固定长度的Unicode类型,如果你的描述长度不固定,建议换成nvarchar(10)更灵活。
  • 关键字列名:像date这种SQL关键字作为列名时,一定要用方括号[date]包裹,避免语法报错。

内容的提问来源于stack exchange,提问作者Elvin Castillo

火山引擎 最新活动