Не удается запустить openquery на связанном сервере

Я выполняю запрос на связанном сервере (IBM DB2), причина, по которой я это делаю, заключается в том, что выполнение простого запроса занимает много времени. ниже приведены два запроса, первый успешно выполняется, поэтому проблема не в запросе

 select top 10 * from [AS400TS_LNK].[TEST].[AUPRDDBF].CONTACCT where  actrno = '8971'  

  select * from openquery(AS400TS_LNK, 'select * from [TEST].[AUPRDDBF].CONTACCT where  actrno = ''8971''')

и ошибка, которую я получаю при запуске открытого запроса

Поставщик OLE DB DB2OLEDB для связанного сервера AS400TS_LNK вернул сообщение Токен *N недействителен. Действительные токены: *N. SQLSTATE: 42601, SQLCODE: -104.

Сообщение 7321, уровень 16, состояние 2, строка 1

Произошла ошибка при подготовке запроса select * from [AS400TS_LNK].[TEST].[AUPRDDBF].CONTACCT, где actrno = '8971' для выполнения с поставщиком OLE DB DB2OLEDB для связанного сервера AS400TS_LNK.


person user2802027    schedule 13.10.2017    source источник
comment
Просто дикая догадка здесь, но легко проверить. Попробуйте удалить квадратные скобки из оператора openquery...   -  person user1429080    schedule 13.10.2017
comment
Как упоминал @user1429080, использование квадратных скобок для обозначения идентификаторов в кавычках - это вещь SQL Server; отправить стандартный SQL на удаленный сервер, используя двойные кавычки для идентификаторов, когда это необходимо (что в любом случае здесь не так).   -  person mustaccio    schedule 13.10.2017


Ответы (1)


Попробуй это:

select * 
from openquery(AS400TS_LNK, 'select * from TEST.AUPRDDBF.CONTACCT where actrno = ''8971''')

Или, если это не так, попробуйте следующее:

select * 
from openquery(AS400TS_LNK, 'select * from TEST.AUPRDDBF.CONTACCT') 
where actrno = '8971'
person Bacon Bits    schedule 13.10.2017