我正在尝试通过链接服务器设置从SQL Server 2008 R2更新PervasiveSQL后端(Sage 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]”。
答案 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
方法效果很好。