Проблема: Распределенных запросов SQL с Oracle вызывает "не удалось открыть таблицу» ошибки

Переводы статьи Переводы статьи
Код статьи: 240340 - Vizualiza?i produsele pentru care se aplic? acest articol.
Эта статья помещена в архив. Она предлагается "как есть" и обновляться не будет.
Развернуть все | Свернуть все

В этой статье

Проблема

При попытке использовать запрос с помощью связанного сервера Oracle с помощью поставщика MSDAORA OLE DB, например:
select * from OracleServer..demo.Product
				
может вызвать сообщение об ошибке следующего вида:
Сервер: Сообщение 7306, уровень 16, состояние 2, строка 1
Не удается открыть таблицу ' "демонстрация". "Продукт"" от поставщика OLE DB 'MSDAORA'. Указанная таблица не существует ..
[Поставщик OLE/DB возвратил сообщение: указанная таблица не существует]
[Поставщик OLE/DB возвратил сообщение: ORA-00942: таблица или представление не существует]

Причина

Запрос может не работать из-за регистра из базы данных Oracle, так как SQL Server использует имена, заключенные в кавычки, когда он поставляется запросы к поставщику.

Временное решение

При обращении к таблицам на связанном сервере Oracle, используйте следующие правила:
  • Если имена таблиц и столбцов были созданы в Oracle без заключенных в кавычки идентификаторов, используйте имена всех прописных. Например ниже будет работать ОК:
    select * from OracleServer..DEMO.PRODUCT
    						
  • Если имена таблиц и столбцов были созданы в Oracle с помощью заключенного в кавычки идентификаторов, используйте так же для всех букв имен, как был использован при имена были созданы в Oracle.
Чувствительность к регистру проблема не возникает при использовании функции OpenQuery или OpenRowset. Ниже будет работать ОК:
SELECT * FROM OPENQUERY(OracleServer, 'select * from PrOdUct')
go
SELECT * FROM OPENRowset('MSDAORA', 'myOracleServer';'demo';'demo', 'select * from PrOdUct' )
go
				

Дополнительная информация

Microsoft SQL Server версии 7.0 предоставляет возможность выполнять запросы к поставщикам OLE DB. Это достигается с помощью функции OpenQuery или OpenRowset Transact-SQL или с помощью запроса с помощью четырех имен частей, включая имя связанного сервера. Например,:
sp_addlinkedserver 'mylinkedserver', 'product_name', 'myoledbprovider', 'data_source','location', 'provider_string', 'catalog'
SELECT * FROM OPENQUERY(mylinkedserver, 'select * from table1')
				

Действия по воспроизведению поведения

  1. Настройка связанного сервера для сервера Oracle:
    EXEC sp_addlinkedserver   'OracleServer',  'Oracle',  'MSDAORA',  'myOracleServer'
    go
    EXEC sp_addlinkedsrvlogin 'OracleServer', 'FALSE', NULL, 'demo', 'demo'
    go
    						
  2. Укажите запрос четыре части:
    SELECT * FROM OracleServer..demo.Product
    						
    Которая сообщает об ошибке, описанных в разделе «СИМПТОМЫ».

Ссылки

Для получения дополнительных сведений на сервере SQL Server распределенные запросы с источником данных Oracle, см. раздел электронной документации по SQL 7.0 "OLE DB Provider для Oracle" и в следующих статьях Microsoft Knowledge Base:
220915Проблема: Распределенных запросов SQL с Oracle потребностей клиента Oracle

221552Проблема: SQL распределенных запросов с ошибкой дает Oracle ЧИСЛОВОГО столбца

Свойства

Код статьи: 240340 - Последний отзыв: 23 февраля 2014 г. - Revision: 2.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 Standard Edition
Ключевые слова: 
kbnosurvey kbarchive kbdatabase kboracle kbprb kbmt KB240340 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:240340

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com