从 SQL Server 与 Informix 通信

Posted

技术标签:

【中文标题】从 SQL Server 与 Informix 通信【英文标题】:Communicating with Informix from SQL Server 【发布时间】:2010-10-22 15:23:05 【问题描述】:

好吧...我有一个程序正在做一些维护。

呃。连描述都让我不寒而栗……对,好吧。

每天晚上,在我们认为是 SQL Server 2000 上运行的数据库连接到 Informix 数据库并将其复制到 SQL Server 中。

Informix/SQL 数据由我正在维护的程序访问,然后将一些数据存储在不同的 SQL Server 2000 数据库中。该数据应该对 Informix 数据有外键约束,但没有。

接下来,来自 SQL 数据库的数据被放回 Informix/SQL 数据库,然后再放回实际的 Informix 数据库。

基本上,我的问题的 root 是非 Informix SQL 数据库上没有外键或主键约束。好吧,有些表在无意义的“ID”列上有一个主键,但这些表没有对任何其他表进行 FK。

我的问题是:Is it possible to link SQL Server 2000 to the native Informix database in some way, so that I can add foreign key constraints within the SQL database so that SQL Server can only create rows when it can refer to existing rows within the Informix database?

我会尽力回答任何人的任何问题,但据我所知,这些设计决策背后的原因是真正的疯狂,所以原因不会特别明确,因为我无法解决它们,我自己……

【问题讨论】:

澄清一下:您希望 SQL Server 在informix 数据库上强制一些关键约束?或者您想简化您的数据视图?如果后者是您想要的,您将在 SQL Server 上进行一些数据清理,然后在您对数据正确感到满意时添加约束。 我希望 SQL 服务器只有在 Informix 数据库中找到相应的主键时才能创建行。 【参考方案1】: 糟糕! 运气不好(你继承的烂摊子)! 祝你好运(你的工作解决了这个问题)!

哪个版本的 Informix,以及它在哪个平台(机器类型,操作系统)上运行?

是否存在您无法更新 Informix 架构以强制实施真正的 RI 约束的原因(除了会因为数据混乱而中断)。但是您可能需要知道混乱的严重程度,以便您可以开始清理过程。 IDS(Informix 动态服务器)确实有“违规表”,可用于跟踪有问题的数据行——“START VIOLATIONS”和“STOP VIOLATIONS”是要在 Informix Guide to SQL: Syntax manual 中查找的语句 您可能会很好需要先卸载并删除一张表中的数据,然后才能开始加载数据并启用违规检查。


澄清后,问题似乎是“我可以在受 Informix 数据库中(引用)表约束的 SQL Server 数据库中的表上设置参照完整性约束吗?”

答案是(可悲的):

没有

大多数 DBMS 都不愿意有跨数据库引用完整性约束,更不用说跨 DBMS 约束了。

最接近的方法是在 SQL Server 数据库中拥有相关 Informix 表的副本,但这可能会增加数据传输工作量。 OTOH,清理数据可能需要 - 一旦数据更接近理智,以后可能会放松复制。这部分取决于引用的 Informix 数据的波动性——向引用的表添加或删除行的频率。

【讨论】:

对不起; “Informix/SQL”是指被复制到 SQL Server 的 Informix 数据库。拥有它似乎很笨拙且没有必要。

以上是关于从 SQL Server 与 Informix 通信的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据从 SQL Server 传输到 Informix,反之亦然

MS SQL Server 中的链接 Informix 表忽略标准?

是否可以同时更新 SQL Server 数据库和 Informix 数据库?

表列表(在 DB2、SQL Server、Informix 和 Oracle 中)

从 Windows 通过 Entity Framework 连接到 Informix 的问题

使用 SQL Management Studio 连接到 Informix 数据库