You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从CSV向MS SQL的varbinary字段批量插入时遇转换截断错误

解决BULK INSERT导入十六进制图像数据的截断错误

1. 修正临时表字段长度

截断错误大概率是临时表的images列长度不足导致的,别用固定长度的VARCHAR,直接用MAX类型容纳长十六进制字符串:

CREATE TABLE #TempImageHex (
    ObjectId INT,
    ImageHex VARCHAR(MAX)  -- 用MAX类型避免长度不够引发的截断
)

2. 调整BULK INSERT参数

Windows系统下的CSV行终止符通常是\r\n而非单纯的\n,加上编码参数避免字符转换问题:

BULK INSERT #TempImageHex 
FROM 'D:\Images.csv'
WITH (
    ROWTERMINATOR = '\r\n',
    FIELDTERMINATOR = ';',
    FIRSTROW = 1,
    CODEPAGE = 'RAW'  -- 跳过字符编码转换,防止数据损坏或截断
)

3. 十六进制转二进制插入目标表

导入临时表后,用CONVERT函数把十六进制字符串转成二进制数据,再写入目标表:

-- 假设目标表名为ImageTable
INSERT INTO ImageTable (ID, Body)
SELECT 
    ObjectId,
    CONVERT(VARBINARY(MAX), ImageHex, 2)  -- 参数2表示输入是不带0x前缀的十六进制字符串
FROM #TempImageHex

额外排查点

  • 如果CSV里的十六进制字符串带引号或空格,导入后要清理,比如用REPLACE(ImageHex, '"', '')去掉引号
  • 要是十六进制字符串开头带0x,把CONVERT的第三个参数改成1即可
  • 确认CSV文件的分隔符确实是;,没有被其他字符干扰

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 04:48:12