如何在SQL中向数据库表插入文件?附现有INSERT语句问题排查
现有SQL语句存在的问题
- 语法错误:表名多了多余的闭合方括号,字段列表前缺少左括号,字段间存在多余逗号
- 逻辑错误:文件路径为本地桌面绝对路径,部署后网站服务无法访问;字符串类型的路径未加单引号包裹
- 笔误:字段
[umber]大概率是[Number]的拼写错误
方案1:存储文件访问路径(推荐,数据库负载更低)
适合文件体积较大的场景,你需要先把txt文件上传到网站服务的静态资源目录(例如站点根目录下的/static/downloads文件夹),存储相对路径即可,插入语句参考:
INSERT INTO [insert].[PRequest] ([Ticket], [Number], [Supp], [Product], [Quantity], [DownloadFile]) VALUES (13, 232, 'qwewe', 'Supp', 232, '/static/downloads/Download.txt') GO
网站端调用时,直接将路径拼接站点域名即可生成可访问的下载链接。
方案2:直接存储文件二进制内容
适合小体积txt文件,数据迁移时不会出现路径失效、文件丢失的问题。首先需要将DownloadFile字段类型修改为VARBINARY(MAX)(SQL Server环境)或对应数据库的二进制大对象类型,插入语句参考:
INSERT INTO [insert].[PRequest] ([Ticket], [Number], [Supp], [Product], [Quantity], [DownloadFile]) SELECT 13, 232, 'qwewe', 'Supp', 232, BulkColumn FROM OPENROWSET(BULK 'C:\Users\casti\OneDrive\Desktop\Download.txt', SINGLE_BLOB) AS FileContent GO
网站端调用时,读取该字段的二进制内容,设置响应头为Content-Type: text/plain、Content-Disposition: attachment; filename=Download.txt即可触发浏览器下载。
内容的提问来源于stack exchange,提问作者John Wick
相关产品推荐
相关产品推荐

