提问人:Twinkles 提问时间:10/10/2023 最后编辑:Dan GuzmanTwinkles 更新时间:10/10/2023 访问量:47
从 csv 批量插入到 varbinary 字段。批量加载数据转换错误
Bulk insert to varbinary field from csv. Bulk load data conversion error
问:
我有一个包含两列的 csv 文档:对象编号 (int) 及其二进制形式的 png 图像。该表具有以下结构:
编号 | 身体 |
---|
ID 字段包含对象标识符(1、2、3 等),body 字段包含以下形式的二进制表示形式:
89504E470D0A1A0A0000000D4948445200000319000002340802000000FEC473F40001000049444154789CECFD599364D9751E0AEEE1CC83CF4378CC915365660D59857920C84B0D26F24ABC4DB559DBFD017AD0A34C6F32BDF77D947E80CCD4BA6D46F151EA36C9244A0401168881280228546565E5109991317BF8EC679EF6DEFDF0453812852A80455611C06D6C4BF38CF0703F (and a lot more signs)
我需要将此数据插入到 MS SQL 表中。因此,最终它们被正确记录并显示为图像。
我尝试进行BULK INSERT查询,但它不起作用。
bulk insert #TempImageHex
FROM 'D:\Images.csv'
WITH (
rowterminator = '\n',
fieldterminator = ';',
firstrow = 1)
给出以下错误:第 1 行第 2 列(图像)的批量加载数据转换错误(截断)。
答:
2赞
Dan Guzman
10/10/2023
#1
您需要将十六进制字符串转换为 才能导入二进制值。varbinary
将数据导入临时表,然后与函数一起使用,将十六进制字符串转换为最终表的二进制。varchar(MAX)
INSERT...SELECT
CONVERT
CREATE TABLE #TempImageHexString(
ID int NOT NULL
, BodyHexString varchar(MAX)
);
CREATE TABLE #TempImageHex(
ID int NOT NULL
, Body varbinary(MAX)
);
BULK INSERT #TempImageHexString
FROM 'D:\Images.csv'
WITH (
ROWTERMINATOR = '\n',
FIELDTERMINATOR = ';',
FIRSTROW = 1);
INSERT INTO #TempImageHex (ID, Body)
SELECT ID, CONVERT(varbinary(MAX), BodyHexString, 0)
FROM #TempImageHexString;
评论
rowterminator = '0x0a'