У меня есть клиент, у которого база данных SQL Server 2000 связана с базой данных Oracle 8i. Они имеют десятки представлений в базе данных SQL Server 2000, которые ссылаются на базу данных Oracle, часто с простым синтаксисом, таким как:
SELECT *
FROM SERVER..DB.TABLE
Эти представления (и ссылки на них) работали на ГОДЫ без проблем. Неожиданно сегодня утром некоторые (но не все) из них выходят из строя со следующей ошибкой:
Server: Msg 7330, Level 16, State 2, Procedure SALES_ORDER_HEADERS, Line 7
Could not fetch a row from OLE DB provider 'MSDAORA'.
[OLE/DB provider returned message: ORA-01854: julian date must be between 1 and 5373484]
OLE DB error trace [OLE/DB Provider 'MSDAORA' IRowset::GetNextRows returned 0x80040e07].
Когда мы выбираем данные, используя приведенный выше синтаксис из четырех частей (тот же синтаксис, что и для представления), запросы выполняются без проблем и без. Однако мы не можем создать представление по этому синтаксису, мы не можем редактировать существующие представления (в конструкторе) и не можем понять, почему работает прямой запрос к связанной таблице, но использование его через запрос не удается.
Моя компания не создавала систему, и мы в целом не поддерживаем ее - у клиента есть внутренняя команда разработчиков, которая работает над ней, но они попросили нашу помощь в устранении неполадок, и мы так же озадачены, как и они Я решил спросить здесь.
Кто-нибудь знает, почему мы увидим это поведение - и, что более важно, как его исправить? (За исключением обновления; на данный момент это не вариант.) В качестве временного обходного пути мы обнаружили, что использование OPENQUERY
работает, но, конечно, это медлительно. Мы бы хотели решение, которое не включает OPENQUERY
, если возможно.
В ответ на комментарии: ORDER BY
не определено в представлениях. Может быть в sprocs, но я не уверен. (Я впервые увидел эту базу данных примерно за 20 минут до публикации вопроса. :))