У меня есть связанный сервер из SQL Server 2008 R2 в базу данных DB2 (V4R5M0) с использованием поставщика OLE DB "IBMDA400"
Сведения о связанном сервере
EXEC master.dbo.sp_addlinkedserver
@server = N'JTEST', @srvproduct=N'IBM OLE DB Provider for DB2',
@provider=N'IBMDA400', @datasrc=N'TestName'
Это отлично работает:
SELECT * FROM OPENQUERY(JTEST, 'Select * from QSYS2.SYSCOLUMNS')
Но следующий оператор выдает ошибку:
SELECT * FROM OPENQUERY(JTEST, 'Select * from QSYS2.SYSCOLUMNS FETCH FIRST 10 ROWS ONLY')
Ошибка
Поставщик LE DB "IBMDA400" для связанного сервера "JTEST" вернул сообщение "SQL0199: Ключевое слово FETCH не ожидается. Допустимые токены: FOR WITH ORDER UNION OPTIMIZE. Причина . . . . . : Ключевое слово FETCH здесь не ожидалось. Произошла синтаксическая ошибка. обнаружено по ключевому слову FETCH. Частичный список допустимых токенов: FOR WITH ORDER UNION OPTIMIZE. Этот список предполагает, что инструкция верна до неожиданного ключевого слова. Ошибка может быть в инструкции раньше, но синтаксис инструкции кажется допустимым. до этого момента. Восстановление...: Проверьте оператор SQL в области указанного ключевого слова. Может отсутствовать двоеточие или разделитель SQL. SQL требует, чтобы зарезервированные слова были разделены, когда они используются в качестве имени. Исправьте оператор SQL. и повторите запрос.". Сообщение 7321, уровень 16, состояние 2, строка 1 Произошла ошибка при подготовке запроса «Выбрать * из QSYS2.SYSCOLUMNS FETCH FIRST 10 ROWS ONLY» для выполнения поставщика OLE DB «IBMDA400» для связанного сервера «JTEST».
Я думаю, это потому, что FETCH FIRST X ROWS ONLY не поддерживается в этой версии DB2? Но есть ли способ выбрать только ограниченный набор записей в этой версии?