2009-01-27 172 views
2

我有一个Visual FoxPro表,我需要从Sql Server访问。在Sql Server x86中,我只需创建一个链接服务器。不幸的是,VFP没有x64驱动 - 所以Sql Server x64无法为它创建链接服务器。Sql Server x64和x86链接服务器

到目前为止,我想出了以下选项 - 其中没有我特别喜欢:

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

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

此外,由于VFP提供程序不能使用4部分语法,因此必须使用OPENQUERY。所有的单引号逃逸的是思考就需要恰好有嵌入到另一个OPENQUERY语句的OPENQUERY语句让我目瞪口呆....

  • 创建一个CLR表值函数,虽然议会将(可能?)也有64 - 所以我不得不出去PROC的(?IPC web服务)来实际运行查询
  • 原来,TVFs需要一个架构,所以这个选项并不像我最初想象的那样干净。我做了一个尖峰使WCF客户端进入MSSQL,它返回一列XML,然后可以使用Sql XML数据类型函数进行分析。它的工作原理,实际上比OPENQUERY查询更好一些,因为它实际上将变量作为参数。这节省了我大部分的单引号和EXEC舞蹈。

    当然,Sql里面的WCF是完全不受支持的,闻起来像是一个很大的黑客攻击。我对性能和可靠性有非常严肃的保留。

  • 停止使从SQL Server查询VFP,和重写的客户端代码好位
  • 显然,这是 “正确” 的答案。但是,有大量的客户端代码依赖于Sql Server表和VFP表之间的连接。重写这些东西来填充临时表或者做客户端连接似乎是一个相当大的负担。

    这里希望有人可以建议一个更好的选择,或一些类似的经验。

    +0

    当试图将FoxPro数据转换为64位机器上的SQL Server时,我们遇到了类似的问题。因为这是一笔一笔的交易与你的第一选择。 – Clinemi 2009-01-30 06:00:50

    回答

    2

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

    如果您可以忍受延迟,SSIS以32位模式运行以定期将数据导入到SQL Server本机表中(如果需要,可以在由同一SP触发的作业中)。这将取决于数据更改的频率以及稍有过时数据的机会。

    +0

    不幸的是,我们对实时数据很感兴趣,并且表的大小使得导入一些PITA。不过,我会记住这一点,因为sp_start_job然后阻止搜索结果实际上可能是最干净的选择 - 就像听起来那样丑陋。 – 2009-01-29 21:42:30

    +0

    尝试接力,然后 - 它不会伤害。你甚至可以在同一台机器上的32位虚拟机上运行它。 – 2009-01-30 01:47:44

    0

    我想我找到了一个替代方案。微软已经发布了一款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=;