2013-07-21 5 views
0

Я пытаюсь обновить данные в брандмауэре PervasiveSQL (Sage ERP system) из SQL Server 2008 R2 с помощью установки Linked Server. Ниже приведены подробности и сообщение об ошибке msg ... Кикер заключается в том, что оператор обновления работает в окне разработки просто отлично, очень похожая настройка. Любая помощь будет оценена!Ошибка SQL Linked Server Ошибка синтаксиса Openquery

Окружающая среда:

  • Windows Server 2008 Enterprise (Cloud сервер, 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) (гипервизор)
  • Sage Timberline ERP работает с Pervasive SQL V.10 бэкэндом

Установка:
У нас есть установка LINKED SERVER в SQL Server 2008 с использованием 32-разрядного драйвера Timberline (OBDC) Связанный сервер использует поставщик MSDASQL со следующими двумя свойствами, установленными в TRUE: «Разрешить inprocess» и «Non Transacted Updates»

Ошибка:
Мы можем успешно извлечь данные, см. Запрос ниже, со связанного сервера. Мы можем успешно просматривать объекты через связанный сервер в 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' 

Ошибка:

OLE DB provider "MSDASQL" for linked server "TLLINKSERVER" returned message "[Sage Timberline Office][Sage Timberline Office ODBC Driver]Syntax Error.". OLE DB provider "MSDASQL" for linked server "TLLINKSERVER" returned message "[Sage Timberline Office][Sage Timberline Office ODBC Driver]UPDATE "\SERVER1\Company Data\DATA\COMPANY1\"<< ??? >>."TABLE1" SET "DATEFIELD1"=? WHERE "JOBID"=? AND "DATEFIELD1"=?".
Msg 7343, Level 16, State 4, Line 1
The OLE DB provider "MSDASQL" for linked server "TLLINKSERVER" could not UPDATE table "[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''); 

Хотя UPDATE OPENQUERY синтаксис вы используете поддерживается для SQL Server связанных серверов, я не уверен, что это верно и для других платформ, таких как PervasiveSQL ...

1

Вот как я обновляю таблицу sin Oracle от SSMS.

Имя связанного сервера в этом случае: MyLinkedServer.

Я обновляю столбец CONTACT_EMAIL в [email protected] где STATE является один из следующих (KY,OH,NY,PA,VA,DC):

UPDATE L 
SET L.CONTACT_EMAIL ='[email protected]' 
FROM OPENQUERY(MyLinkedServer, 'SELECT * from MyTable')L 
WHERE L.STATE IN('KY','OH', 'NY','PA','VA','DC') 

OPENQUERY метод отлично работает.

Смежные вопросы