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

如何将Oracle中的Blob数据插入到SQL Server的Image数据类型列中

问题解决方法

该场景下需要对Oracle侧采集的BLOB数据做显式类型转换,才可以正确写入SQL Server。

注意事项

  • SQL Server的Image数据类型已被官方标记为弃用,后续版本会移除该类型,建议优先使用VARBINARY(MAX)类型存储二进制图像数据,兼容性和性能表现更好。
  • 跨链接服务器读取Oracle BLOB数据时,不要直接使用四部分名称(链接服务器名..用户名.表名)的方式查询,该方式会导致BLOB数据被隐式转换为非二进制格式,出现数据损坏。

正确插入语句

优先通过OPENQUERY在Oracle侧执行查询获取原生BLOB数据,再显式转换为VARBINARY(MAX)类型后写入目标表,示例如下:

INSERT INTO ICCS_Signature_INW_Test (AccountNumber, Image)
SELECT 
    ACCT_NUM,
    CAST(ORIG_IMAGE AS VARBINARY(MAX))
FROM OPENQUERY(你的Oracle链接服务器名称, '
    SELECT ACCT_NUM, ORIG_IMAGE 
    FROM 你的Oracle源表名 
    WHERE ACCT_NUM = ''123456789''
')

如果是手动插入单条图像数据,需要先将原始图像数据转换为十六进制字符串,添加0x前缀后直接写入即可:

INSERT INTO ICCS_Signature_INW_Test (AccountNumber, Image)
VALUES ('123456789', 0x[完整的图像十六进制编码])

数据一致性校验

插入完成后可通过比对两端的MD5哈希值确认数据是否一致:

  1. Oracle侧计算原始BLOB的MD5值:
SELECT DBMS_CRYPTO.HASH(ORIG_IMAGE, 2) FROM 你的Oracle源表名 WHERE ACCT_NUM = '123456789';
  1. SQL Server侧计算写入数据的MD5值:
SELECT HASHBYTES('MD5', Image) FROM ICCS_Signature_INW_Test WHERE AccountNumber = '123456789';

两个查询返回的哈希值完全一致则说明数据插入正确。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:06:07