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

已安装驱动,如何通过ODBC连接Progress OpenEdge与MS SQL Server并导入数据?

从MS SQL Server通过ODBC连接Progress OpenEdge并导入全量数据的实操方案

刚好之前帮客户落地过一模一样的需求,下面是我整理的一步步实操指南,亲测有效:

1. 先确认ODBC驱动的连接有效性

你已经在ODBC数据源里加了驱动,但一定要先验证这个DSN能正常连上OpenEdge——这是后续所有操作的基础:

  • 打开和你的SQL Server版本匹配的ODBC数据源管理器(划重点:64位SQL就用64位ODBC,32位同理,不匹配会直接失败)
  • 找到你创建的OpenEdge DSN,点击「配置」,输入OpenEdge的服务器地址、端口、库名、账号密码,点「测试连接」。如果连不上,先排查OpenEdge服务是否启动、端口是否对外开放、账号权限是否足够。

2. 在SQL Server里创建链接服务器(Linked Server)

这一步是让SQL Server能直接“看到”OpenEdge的数据库,有两种方式:

2.1 用SSMS图形界面(新手友好)

  • 打开SQL Server Management Studio,展开你的实例 → 「服务器对象」→ 右键「链接服务器」→ 「新建链接服务器」
  • 常规选项卡:
    • 链接服务器名称:取个好记的,比如OpenEdge_Linked
    • 服务器类型选「其他数据源」
    • 提供程序选Progress OpenEdge ODBC Driver(要和你ODBC配置的驱动一致)
    • 产品名称填OpenEdge
    • 数据源填你之前创建的ODBC数据源名称(就是DSN的名字)
  • 安全性选项卡:
    • 选「使用此安全上下文建立连接」,然后输入OpenEdge的用户名和密码
  • 点「确定」,如果配置没问题,链接服务器会创建成功,展开它就能看到OpenEdge里的表了。

2.2 用T-SQL脚本(适合自动化/批量场景)

如果你习惯用代码,执行下面的脚本(记得替换占位符):

-- 创建链接服务器
EXEC sp_addlinkedserver
    @server = N'OpenEdge_Linked', -- 自定义链接服务器名
    @srvproduct=N'OpenEdge',
    @provider=N'MSDASQL',
    @datasrc=N'你的ODBC数据源名称'; -- 替换成实际DSN名

-- 设置安全登录
EXEC sp_addlinkedsrvlogin
    @rmtsrvname=N'OpenEdge_Linked',
    @useself=N'False',
    @rmtuser=N'OpenEdge账号', -- 替换成实际用户名
    @rmtpassword=N'OpenEdge密码'; -- 替换成实际密码

测试一下:执行SELECT TOP 10 * FROM OpenEdge_Linked...["你的表名"],如果能返回数据就说明连接成功了(注意OpenEdge的表名可能区分大小写,需要用双引号包裹)。

3. 把OpenEdge的数据导入SQL Server

连接通了之后,导入数据有两种常用方式:

3.1 SSMS导入导出向导(可视化操作,适合全量导入)

  • 右键你要导入数据的SQL数据库 → 「任务」→ 「导入数据」
  • 数据源选「ODBC数据源」,然后选你的OpenEdge DSN,输入账号密码
  • 目标选「SQL Server Native Client」,选择你的SQL实例和目标数据库
  • 选择要导入的表:可以全选所有表,也可以挑需要的
  • 配置导入选项:比如是否覆盖现有表、是否启用标识插入等,根据你的需求设置
  • 最后点「完成」,等待导入完成就行。

3.2 T-SQL脚本导入(适合自定义逻辑/分批导入)

如果需要过滤数据、转换字段,或者数据量太大怕超时,用INSERT INTO...SELECT更灵活:

-- 方式1:直接创建新表并导入数据
SELECT *
INTO SQL_Target_Table
FROM OpenEdge_Linked...["OpenEdge_Source_Table"]; -- 替换成实际表名

-- 方式2:往已存在的表插入数据(需要字段匹配)
INSERT INTO SQL_Target_Table (列1, 列2, 列3)
SELECT 列1, 列2, 列3
FROM OpenEdge_Linked...["OpenEdge_Source_Table"]
WHERE 你的过滤条件; -- 可选,比如只导入近一年的数据

-- 大数据量分批导入(避免锁表/超时)
DECLARE @BatchSize INT = 10000;
DECLARE @RowCount INT = 1;

WHILE @RowCount > 0
BEGIN
    INSERT INTO SQL_Target_Table (主键列, 列1, 列2)
    SELECT TOP (@BatchSize) 主键列, 列1, 列2
    FROM OpenEdge_Linked...["OpenEdge_Source_Table"]
    WHERE 主键列 NOT IN (SELECT 主键列 FROM SQL_Target_Table);

    SET @RowCount = @@ROWCOUNT;
END

4. 常见坑点排查

  • 链接服务器创建失败:大概率是ODBC驱动版本和SQL Server不匹配(64位/32位搞混了),或者OpenEdge的连接参数填错了,再仔细核对一遍。
  • 找不到表对象:OpenEdge的表名通常是大写的,而且需要用双引号包裹,比如"CUSTOMER",可以在ODBC数据源的「配置」里查看表名的实际格式。
  • 导入超时:数据量太大的话,调整SQL Server的远程查询超时时间(实例属性 → 连接 → 远程查询超时),或者用上面的分批导入脚本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:25:06