【问题标题】:Sql Server x64 and x86 Linked ServerSql Server x64 和 x86 链接服务器
【发布时间】:2009-01-27 15:19:00
【问题描述】:

我有一个需要从 Sql Server 访问的 Visual FoxPro 表。在 Sql Server x86 中,我将只创建一个链接服务器。不幸的是,没有用于 VFP 的 x64 驱动程序 - 因此 Sql Server x64 无法为其创建链接服务器。

到目前为止,我已经提出了以下选项 - 没有一个是我特别喜欢的:

  1. 设置 x86 Sql Server 用作中继,以便查询从 x64 -> x86 -> VFP。

我并不真正关心这个,因为除了作为开发人员之外,我还是系统管理员。所以,这意味着我需要修补、维护和监控另一个 Sql Server - 可能还有另一个服务器(假设我不只是使用单独的实例)。

另外,由于 VFP 提供程序不能使用 4 部分语法,我必须使用 OPENQUERY。想到将 OPENQUERY 语句嵌入到另一个 OPENQUERY 语句中所需要的所有单引号转义让我头晕目眩....

  1. 创建一个 CLR 表值函数,尽管程序集(大概?)也是 x64 - 所以我必须退出 proc(IPC?Webservice?)才能实际运行查询

原来 TVF 需要一个模式,所以这个选项并不像我最初想象的那样干净。我做了一个峰值来让 WCF 客户端进入 MSSQL,它返回一个 XML 列,然后可以使用 Sql XML 数据类型函数对其进行解析。它可以工作,并且实际上比 OPENQUERY 更易于查询,因为它实际上将变量作为参数。这为我节省了大部分单引号和 EXEC 舞蹈。

当然,Sql 中的 WCF 完全不受支持,而且闻起来像是一个相当大的 hack。我对性能和可靠性持相当严格的保留意见。

  1. 停止从 Sql Server 到 VFP 进行查询,并重写大量客户端代码

显然,这是“正确”的答案。但是,有很多客户端代码依赖于 Sql Server 表和 VFP 表之间的连接。重写这些东西来填充临时表或进行客户端连接似乎是一个相当大的负担。

希望有人能提出更好的选择,或一些类似的经验。

【问题讨论】:

  • 我们在 64 位机器上尝试将 FoxPro 数据转换为 SQL Server 时遇到了类似的问题。因为这是你的第一个选择的一次性交易。

标签: sql-server x86 64-bit foxpro visual-foxpro


【解决方案1】:

这是一个讨厌的问题,我同意。

SSIS 在 32 位模式下运行以定期(可能是按需,在由同一 SP 触发的作业中)将数据导入 SQL Server 本机表,如果您能忍受延迟,这是另一种选择。这将取决于数据更改的频率以及数据略微过时的问题。

【讨论】:

  • 不幸的是,我们有点迷上了实时数据——表格的大小使得导入有点 PITA。不过我会记住这一点,因为也许 sp_start_job 然后阻塞结果实际上可能是最干净的选择 - 就像听起来一样丑陋。
  • 那就试试继电器吧——不会有伤害的。您甚至可以在同一台机器上的 32 位 VM 中运行它。
【解决方案2】:

我想我找到了替代方案。微软已经发布了updated driver for Access,它有 32 位和 64 位两种版本。与原始的 Jet OleDB 驱动程序一样,这将允许您从 SQL Server x64 中 access dBase file formats

唯一的限制是 DBF 必须位于 dBASE formats supported by ISAM 之一中。我已经使用 dBASE IV 格式进行了一些测试,它似乎可以使用以下连接字符串。

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\folder;Extended Properties=dBASE IV;User ID=Admin;Password=;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 2020-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多