Как использовать локальную таблицу БД в сквозном запросе?

В настоящее время я работаю над запросом в Access 2010 и пытаюсь заставить работать приведенный ниже запрос. У меня есть строка соединения между моей локальной БД и сервером, через который я прохожу, чтобы работать нормально.

Select column1 , column2 from serverDB.dbo.table1 where column1 in (Select column1 from tbl_Name1)

В этой ситуации table1 - это таблица на сервере, через которую я прохожу, но tbl_Name1 - это таблица, которая фактически находится в моей БД Access, которую я пытаюсь использовать, чтобы создать ограничения для данных, которые я извлекаю из сервер.

Когда я пытаюсь выполнить запрос, я получаю сообщение об ошибке, что он не считает, что tbl_Name1 существует.

Любая помощь приветствуется!

2 ответа

Решение

Я думаю, что проблема заключается в том, что сквозной запрос выполняется на сервере. Поскольку одна из таблиц находится в локальном файле Access, она не найдет таблицу.

Возможный обходной путь, если вы должны остаться с сквозной передачей, - это то, что вы можете построить строку SQL с результатами вложенного запроса, а не саму строку запроса (в зависимости от количества результатов это может или не может быть практичным)

например, вместо Select column1 from tbl_Name1 ты используешь "c1result1","c1result2",....

Я только что наткнулся на решение, которое может помочь другим в подобной ситуации.

Этот подход прост, потому что вы можете просто выполнить один запрос в локальной базе данных Access и получить все необходимое за один раз. Тем не менее, в отличие от удаленного сервера, на вашем локальном компьютере может быть выполнено много фильтрации / обработки сквозных результатов, что может не обязательно быть быстрым.

меры

  1. Создайте запрос, сделайте его запросом "Pass Through" и настройте его свойство "ODBC Connect Str" для подключения к удаленной базе данных.
  2. Напишите проходной запрос, что-то вроде SELECT RemoteId From RemoteTable и дать вашему проходному запросу имя, может быть PassThroughQuery
  3. Создайте новый запрос, сделайте его обычным запросом "Выбрать".
  4. Напишите новый запрос, используя только что созданный сквозной запрос в виде таблицы в этом новом запросе (кажется странным использовать запрос в качестве таблицы, но он работает), и присоединитесь к нему. PassThroughQuery "table" к вашей локальной таблице и отфильтруйте ее по значениям в локальной таблице, что-то вроде SELECT R.RemoteId, L.LocalValue FROM PassThroughQuery R INNER JOIN LocalTable L ON L.LocalId = R.RemoteId where L.LocalValue = 'SomeText'

Этот подход позволяет вам аккуратно смешивать / объединять результаты сквозного запроса и данные в локальной таблице базы данных Access, хотя потенциально и медленно, если задействовано много данных.

Другие вопросы по тегам