如何在SQL Server中提取哈希存储的附件并保存为本地文件
SQL Server 按需提取二进制附件的简单方法
你提到的「hash存储」实际是SaaS厂商把文件内容以二进制格式(SQL Server中通常为varbinary(max)类型)存储在表字段中,以下两种方法都可以实现单条记录对应文件的提取,操作难度都很低:
方法1:SSMS 图形界面导出(无需额外配置,推荐新手使用)
- 第一步:运行查询定位到你需要的单条记录,示例查询语句如下,替换成你自己的表名、字段名和筛选条件即可:
-- 替换字段、表名、筛选条件为你实际的内容 SELECT 存储文件二进制内容的字段名 FROM 你的表名 WHERE 唯一标识字段 = 目标记录ID
- 第二步:在查询结果的二进制内容单元格上右键,选择「将结果另存为」,选择本地保存路径,先随便输入一个临时文件名保存
- 第三步:找到保存好的临时文件,手动修改为对应的正确扩展名即可正常打开
注意:如果表中有存储原始文件名/扩展名的字段,提取前可以先查出来对应上,避免扩展名错误导致文件打不开
方法2:BCP 命令导出(兼容性更高,不会出现界面导出的格式异常)
如果方法1导出的文件无法正常打开,可以用系统自带的BCP命令导出,操作步骤如下:
- 第一步:先开启SQL Server的xp_cmdshell权限(本地自用数据库无安全风险,用完可以关闭),运行以下SQL:
-- 开启高级选项 sp_configure 'show advanced options', 1; RECONFIGURE; -- 启用xp_cmdshell sp_configure 'xp_cmdshell', 1; RECONFIGURE;
- 第二步:运行导出命令,替换对应参数即可:
EXEC xp_cmdshell 'bcp "SELECT 存储文件二进制内容的字段名 FROM 你的库名.dbo.你的表名 WHERE 唯一标识字段 = 目标记录ID" queryout "C:\保存路径\临时文件名" -S 你的SQL实例名 -T -c'
参数说明:
-T表示用当前Windows账号身份验证登录,如果你用SQL账号登录,替换为-U 你的用户名 -P 你的密码- 导出完成后同样手动修改文件扩展名即可正常使用
- 第三步(可选):用完关闭xp_cmdshell降低安全风险:
sp_configure 'xp_cmdshell', 0; RECONFIGURE; sp_configure 'show advanced options', 0; RECONFIGURE;
内容的提问来源于stack exchange,提问作者Keith
相关产品推荐
相关产品推荐

