Как использовать локальную таблицу БД в сквозном запросе?
В настоящее время я работаю над запросом в 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 и получить все необходимое за один раз. Тем не менее, в отличие от удаленного сервера, на вашем локальном компьютере может быть выполнено много фильтрации / обработки сквозных результатов, что может не обязательно быть быстрым.
меры
- Создайте запрос, сделайте его запросом "Pass Through" и настройте его свойство "ODBC Connect Str" для подключения к удаленной базе данных.
- Напишите проходной запрос, что-то вроде
SELECT RemoteId From RemoteTable
и дать вашему проходному запросу имя, может бытьPassThroughQuery
- Создайте новый запрос, сделайте его обычным запросом "Выбрать".
- Напишите новый запрос, используя только что созданный сквозной запрос в виде таблицы в этом новом запросе (кажется странным использовать запрос в качестве таблицы, но он работает), и присоединитесь к нему.
PassThroughQuery
"table" к вашей локальной таблице и отфильтруйте ее по значениям в локальной таблице, что-то вродеSELECT R.RemoteId, L.LocalValue FROM PassThroughQuery R INNER JOIN LocalTable L ON L.LocalId = R.RemoteId where L.LocalValue = 'SomeText'
Этот подход позволяет вам аккуратно смешивать / объединять результаты сквозного запроса и данные в локальной таблице базы данных Access, хотя потенциально и медленно, если задействовано много данных.