我有一个需要从Sql Server访问的Visual FoxPro表。在Sql Server x86中,我只想创建一个链接服务器。不幸的是,VFP没有x64驱动程序 - 所以Sql Server x64无法创建链接服务器。
到目前为止,我已经提出了以下选项 - 其中没有一个我特别喜欢:
我并不关心这一点,因为除了开发之外,我也是系统管理员。所以,这意味着我需要修补,维护和监视另一个Sql Server - 可能还有另一个服务器(假设我不只是使用单独的实例)。
此外,由于VFP提供程序不能使用4部分语法,我必须使用OPENQUERY。考虑到所有单引号转义,需要将OPENQUERY语句嵌入到另一个OPENQUERY语句中,这让我头晕目眩....
事实证明,TVF需要一个架构,所以这个选项不像我最初想的那么干净。我做了一个高峰来获得一个WCF客户端到MSSQL,它返回一列XML,然后可以使用Sql XML数据类型函数进行解析。它的工作原理,实际上比OPENQUERY更好一点,因为它实际上需要变量作为参数。这节省了我的大部分单引号和EXEC舞蹈。
当然,Sql中的WCF完全不受支持,闻起来像是一个非常大的黑客。我对性能和可靠性有很严重的保留意见。
显然,这是“正确”的答案。但是,有很多客户端代码依赖于Sql Server表和VFP表之间的连接。重写这些东西来填充临时表或做客户端连接似乎是一个相当大的负担。
这里希望有人能提出更好的选择或类似的经历。
答案 0 :(得分:2)
这是一个令人讨厌的问题,我同意。
SSIS以32位模式运行以定期导入数据(可能是按需,在同一SP触发的作业中)到SQL Server本机表是另一种选择,如果你能忍受延迟。这取决于数据变化的频率和稍有过时数据的可能性问题。
答案 1 :(得分:0)
我想我找到了另一种选择。微软发布了updated driver for Access,它有32位和64位两种版本。与原始的Jet OleDB驱动程序一样,这将允许您从SQL Server x64 access dBase file formats。{/ p>
唯一的限制是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=;