0

我正在尝试通过链接服务器设置从 SQL Server 2008 R2 更新 PervasiveSQL 后端(Sage ERP 系统)中的数据。以下是返回的详细信息和错误消息... 关键是更新语句在开发框上工作得很好,非常相似的设置。任何帮助将不胜感激!

环境:

  • Windows Server 2008 Enterprise(云服务器、Rackspace)
  • Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (Intel X86) Express Edition with Advanced Services on Windows NT 6.1 (Build 7601: Service Pack 1) (WOW64) (Hypervisor)
  • 使用 Pervasive SQL v.10 后端运行的 Sage Timberline ERP

设置:
我们在 SQL Server 2008 中有一个 LINKED SERVER 设置,使用 32 位 Timberline 驱动程序 (OBDC) 链接服务器使用 MSDASQL 提供程序,以下两个属性设置为 TRUE,“允许进程内”和“非事务更新”< /p>

问题:
我们可以从链接服务器成功提取数据,请参见下面的查询。我们可以通过 SSMS 中的链接服务器成功浏览对象。

SELECT * 
FROM OPENQUERY (TLLINKSERVER, 'SELECT * FROM TABLE1 where JOBID = ''00-00-111111''')

但是,UPDATE下面的语句返回以下错误。

UPDATE OPENQUERY(TLLINKSERVER, 'SELECT * FROM TABLE1 WHERE JOBID = ''00-00-111111''')
SET DATEFIELD = '2013-07-15'

错误:

链接服务器“TLLINKSERVER”的 OLE DB 提供程序“MSDASQL”返回消息“[Sage Timberline Office][Sage Timberline Office ODBC 驱动程序]语法错误。”。链接服务器“TLLINKSERVER”的 OLE DB 提供程序“MSDASQL”返回消息“[Sage Timberline Office][Sage Timberline Office ODBC Driver]UPDATE "\SERVER1\Company Data\DATA\COMPANY1\"<< ??? >>."TABLE1 " SET "DATEFIELD1"=? WHERE "JOBID"=? AND "DATEFIELD1"=?"。
消息 7343,级别 16,状态 4,第 1 行
链接服务器“TLLINKSERVER”的 OLE DB 提供程序“MSDASQL”无法更新表“[MSDASQL]”。

4

2 回答 2

1

为什么不让事情变得更容易?PervasiveSQL 不支持通过链接服务器直接更新吗?

UPDATE TLLINKSERVER...TABLE1 
  SET DATEFIELD = '2013-07-15'
  WHERE JOBID = '00-00-111111';

或者可能:

SELECT * FROM OPENQUERY(TLLINKSERVER, 'UPDATE TABLE1
  SET DATEFIELD = ''2013-07-15''
  WHERE JOBID = ''00-00-111111'');

虽然UPDATE OPENQUERYSQL Server 链接服务器支持您使用的语法,但我不确定其他平台是否适用,例如 PervasiveSQL ...

于 2013-07-21T19:38:23.973 回答
1

这就是我从 SSMS 更新表 sin Oracle 的方式。

在这种情况下,链接服务器名称是MyLinkedServer

我正在将该列更新为CONTACT_EMAIL以下MyEmail@MyDomain.COM内容STATE之一(KY,OH,NY,PA,VA,DC)

UPDATE L 
SET L.CONTACT_EMAIL ='MyEmail@MyDomain.COM'
FROM OPENQUERY(MyLinkedServer, 'SELECT * from MyTable')L
WHERE L.STATE IN('KY','OH', 'NY','PA','VA','DC')

OPENQUERY方法完美。

于 2014-02-05T20:45:03.630 回答