В SQL Server связанные серверы позволяют нам подключаться к другим системам управления реляционными базами данных (RDBMS) и получать доступ к их данным. Однако иногда при работе со связанными серверами могут возникать ошибки. В этой статье мы рассмотрим одну такую ошибку и ее решение.
Поставщик OLE DB “ASEOLEDB” предоставил несогласованную метаданные для столбца
Недавно клиент столкнулся с ошибкой при попытке выполнить запрос к связанному серверу Sybase. Они попытались выполнить следующий запрос:
SELECT *
FROM SYBASESERVER.prodxc.dbo.sysobjects
Однако этот запрос завершился с ошибкой:
Msg 7356, Level 16, State 1, Line 1
Поставщик OLE DB "ASEOLEDB" для связанного сервера "SYBASESERVER" предоставил несогласованную метаданные для столбца.
Столбец "versionts" (порядковый номер времени компиляции 20) объекта "prodxc.dbo.sysobjects" был объявлен с флагом "DBCOLUMNFLAGS_ISFIXEDLENGTH" равным 16 на этапе компиляции и 0 на этапе выполнения.
При дальнейшем исследовании мы обнаружили, что проблема, казалось, связана с конкретной таблицей “sysobjects”. Для устранения неполадки мы предложили попробовать выполнить тот же запрос с другими таблицами в системном каталоге, и удивительно, эти запросы успешно выполнились без проблем.
В качестве временного решения мы рекомендовали использовать формат запроса связанного сервера OPENQUERY:
SELECT *
FROM OPENQUERY([SYBASESERVER], 'SELECT * FROM PRODXC.DBO.SYSOBJECTS')
Этот формат обходит проблему и позволяет выполнить запрос без ошибок.
При дальнейшем анализе мы обнаружили, что поставщик Sybase OLE DB MDA на сервере Sybase не был обновлен. Важно убедиться, что драйверы на стороне клиента и сервера обновлены, чтобы избежать подобных несоответствий.
Вывод
Связанные серверы в SQL Server предоставляют удобный способ доступа к данным из других RDBMS. Однако важно знать о возможных проблемах, таких как ошибки несогласованной метаданных. Используя формат OPENQUERY и обеспечивая актуальность драйверов, мы можем преодолеть эти проблемы и продолжать работать со связанными серверами без проблем.