我有一个需要从 Sql Server 访问的 Visual FoxPro 表。在 Sql Server x86 中,我将只创建一个链接服务器。不幸的是,没有用于 VFP 的 x64 驱动程序 - 因此 Sql Server x64 无法为其创建链接服务器。
到目前为止,我已经提出了以下选项——其中没有一个是我特别喜欢的:
- 设置一个 x86 Sql Server 用作中继,以便查询从 x64 -> x86 -> VFP。
我真的不关心这个,因为除了作为开发人员之外,我还是系统管理员。所以,这意味着我需要修补、维护和监控另一个 Sql Server - 可能还有另一个服务器(假设我不只是使用单独的实例)。
此外,由于 VFP 提供程序不能使用 4 部分语法,因此我必须使用 OPENQUERY。想到将 OPENQUERY 语句嵌入到另一个 OPENQUERY 语句中所需要的所有单引号转义让我头晕目眩……
- 创建一个 CLR 表值函数,尽管程序集(大概?)也是 x64 - 所以我必须退出 proc(IPC?Webservice?)才能实际运行查询
事实证明 TVF 需要一个模式,所以这个选项并不像我最初想象的那样干净。我做了一个峰值来让 WCF 客户端进入 MSSQL,它返回一个 XML 列,然后可以使用 Sql XML 数据类型函数对其进行解析。它可以工作,并且实际上比 OPENQUERY 更易于查询,因为它实际上将变量作为参数。这为我节省了大部分单引号和 EXEC 舞蹈。
当然,Sql 中的 WCF 完全不受支持,而且闻起来像是一个相当大的 hack。我对性能和可靠性有相当严重的保留。
- 停止从 Sql Server 到 VFP 的查询,并重写大量客户端代码
显然,这是“正确”的答案。但是,有很多客户端代码依赖于 Sql Server 表和 VFP 表之间的连接。重写这些东西以填充临时表或进行客户端连接似乎是一个相当大的负担。
这里希望有人能提出更好的选择,或一些类似的经验。