SQL链接服务器更新Openquery语法错误

时间:2013-07-21 17:02:13

标签: sql-server-2008-r2 openquery pervasive

我正在尝试通过链接服务器设置从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,在Windows NT 6.1上具有高级服务(Build 7601:Service Pack 1)(WOW64)(管理程序)
  • 使用Pervasive SQL v.10后端运行的Sage Timberline ERP

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

问题:
我们可以从链接服务器成功提取数据,请参阅下面的查询。我们可以通过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   驱动程序]语法错误。“。OLE DB提供程序”MSDASQL“用于链接服务器   “TLLINKSERVER”返回消息“[Sage Timberline Office] [Sage   Timberline Office ODBC Driver] UPDATE“\ SERVER1 \ Company   Data \ DATA \ COMPANY1 \“<< ???>>。”TABLE1“SET”DATEFIELD1“=?WHERE   “JOBID”=?和“DATEFIELD1”=?“   Msg 7343,Level 16,State 4,Line 1
  链接服务器“TLLINKSERVER”的OLE DB提供程序“MSDASQL”不能   更新表“[MSDASQL]”。

2 个答案:

答案 0 :(得分: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'');

虽然SQL Server链接服务器支持您使用的UPDATE OPENQUERY语法,但我不确定PervasiveSQL等其他平台是否正确...

答案 1 :(得分: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方法效果很好。