在表中错误地插入数据

Incorrect insertion of data into the table

提问人:Twinkles 提问时间:10/11/2023 最后编辑:marc_sTwinkles 更新时间:10/11/2023 访问量:56

问:

我有一个用于在数据库中存储图像的表()。它包含以下列:#TempImage

Image_ID Obj_id 身体 类型
1 22 0x89504E470D0A1A0A0000000D494844 图片/png
2 23 0x89504E470D0A1A0A0000000D494844 图片/png
  • Image_id- 唯一的图像编号
  • Obj_id- 图像所属对象的唯一编号
  • Body- 编码图像(数据类型)varbinary
  • Type- 图片类型(自动填写)

我需要向此表添加大量图像。

我有一个 csv 文档(Image.csv),其中有关 和 的信息。字段中的信息如下所示:obj_idbodybody

89504E470D0A1A0A0000000D4948445200000319000002340802000000FEC473F40001000049444154789CECFD5

我尝试进行以下查询:

CREATE TABLE #TempImageHexString
(
    ID int NOT NULL,
    BodyHexString varchar(MAX)
)
 
CREATE TABLE #TempImageHex
(
    ID int NOT NULL,
    Body varchar(MAX)
)

BULK INSERT #TempImageHexString
FROM 'D:\Image.csv'
WITH (
  ROWTERMINATOR = '\n',
  FIELDTERMINATOR = ';',
  FIRSTROW = 1)
  
INSERT INTO #TempImageHex (ID, Body)
    SELECT ID, CONVERT(varbinary(MAX), BodyHexString, 0)
    FROM #TempImageHexString
 
INSERT INTO #TempImage (FEATURE_TRANSACTION_ID, BODY) 
    SELECT ID, CONVERT(varbinary(MAX), Body, 0) 
    FROM #TempImageHex

插入到表中时,列中将显示以下值:#TempImageBody

0x38393530344534373044304131413041303030303030304434393438343435323030303030333139303030303032333430383032303030303030464543343733463430303031303030303439343434313534373839434543464435393933363444393735314530414545453143433833434634333738434339313533363536363044353938353739323043383442304432364632344142433444423535394442464430313741443041333443364633324244463737443934374538304343443442413644343646

我不知道它是什么,它绝对不是一个.此外,我希望该列自动填充值。.pngTypeimage/png

请告诉我我错了什么以及如何解决这个错误。

sql-server sql-server-2008 插入 var二进制

评论

0赞 Dale K 10/11/2023
文件中的字符串应该是 varbinary 值吗?如果是这样,它应该以......如果没有,那就解释了你的错误。0x
2赞 AlwaysLearning 10/11/2023
似乎您已经阅读了足够多的 CAST 和 CONVERT (Transact-SQL) 文档,知道可以接受二进制样式,但看起来您阅读得不够仔细。样式将 ASCII 字符转换为二进制字节,因此 =>、=> 等。您是否尝试过使用任何其他二进制样式?例如:convert()080x3890x39CONVERT(varbinary(MAX), '0x'+BodyHexString, 1)
2赞 Thom A 10/11/2023
你真的还在用 2008 年吗?该版本在 4 年前完全不受支持;它缺乏许多现在被认为是理所当然的功能,也是一个安全漏洞。您确实需要实施最终的升级计划。
0赞 Dale K 10/11/2023
SQL Server 如何从二进制文件中知道映像类型是什么?
1赞 siggemannen 10/11/2023
@AlwaysLearning是对的,我认为 OP 从之前提出的关于这个问题的问题中得到了这种转换样式。我还认为将图像存储在数据库中通常是一个坏主意。但至少如果你正在这样做,你不妨存储文件名,这样就很容易弄清楚它是 png 还是 tiff

答: 暂无答案