感谢 Tiran 提出的解决方案。对于那些像 Tiran 那样尝试通过 SQL 服务器引用多个表的人,我有额外的输入。
我正在尝试同时从多个源(进度)、相同的表结构中提取数据并将其插入我们的数据仓库(SQL Server)。所以我只是想在不同的数据库中合并多个相同的结构化表。Tiran 的解决方案让我走上了同样的道路,但 Progress 数据库的链接是一个繁琐的过程,需要我找到一个有 2-3 天空闲时间的 Progress DBA(他的报价)来把它放在一起。当我直接与 Progress 的人交谈时,他们还指出,如果我在 Progress 端创建一个带有 union 的视图,它将按顺序从视图中的每个源中提取数据,而不是同时提取。然而,这让我发现了另一个发现,它看起来可以解决我们的需求,并且完全跳过了处理进度方面的链接表。
这是一个包含三个源的示例,相同的表(这也适用于跨源连接的不同表)。此处提供的所有名称只是为了在示例中清晰起见。
Source 1 - Table_A
Source 2 - Table_A
Source 3 - Table_A
- 创建到名为 source1 的源 1 的 ODBC 连接。
- 创建到名为 source2 的源 2 的 ODBC 连接。
- 创建到名为 source3 的源 3 的 ODBC 连接。(注意,您通常希望确保将连接设置设置为未提交读取)。
在 SQL Server 中,创建到每个 Source 的链接服务器连接。
ls_source1
ls_source2
ls_source3
在您需要引用 Progress 数据库的 SQL Server 数据库中,创建一个使用联合将三个不同的链接服务器连接连接在一起的视图。每个链接服务器引用都需要使用 openquery。此示例使用 select * from each 链接服务器源假定所有列的命名和结构都与每个源相同。
CREATE VIEW table_name_v as
SELECT *
FROM
(SELECT *
FROM OPENQUERY(ls_source1,
'select *
from source1.dbo.Table_A
')
union
SELECT *
FROM OPENQUERY(ls_source2,
'select *
from source2.dbo.Table_A
'
union
SELECT *
FROM OPENQUERY(ls_source3,
'select *
from source3.dbo.Table_A
'
)
) x
创建视图后,您现在可以同时查询不同进度源中的所有三个表。不需要在 Progress 端进行额外设置。
我目前正在努力解决一个重要的警告。如果您在使用 64 位 SQL Server 的 64 位计算机上,则需要使用 64 位驱动程序通过链接服务器选项连接到 Progress 数据库。我的需求要求我在同一台机器上同时拥有 32 位和 64 位驱动程序,并且遇到了问题,因为显然它们在同一台机器上不能很好地协同工作。我已经能够在同一台机器上安装 64 位和 32 位驱动程序(Progress 网站出现故障,本应向我发送该驱动程序的链接,但我能够让某人将我引导到正确的位置检索 64 位 odbc 驱动程序。普通人不需要两个驱动程序,可以只使用 64 位。作为替代解决方法,如果我 我无法让两个驱动程序在同一台机器上共存,我发现并确认 Connx 公司提供了一个驱动程序,该驱动程序提供了一个 64 位/32 位桥接器,可以为我解决这个问题。但理想情况下,不需要第三方软件。
不幸的是,现在出现了一个新问题,因为我设置和使用的链接服务器不再正常运行。前进两步,后退一步……
只是想我会分享我的发现,因为我确信还有其他人在寻找。