Результаты не отображаются при выполнении запроса, связанного SQL Server таблицами из разных источников

Исходный номер базы знаний: 824169

Примечание.

Эта статья применима к файлам баз данных Microsoft Access (.mdb) или (.accdb). Требуются базовые навыки работы с кодом, макросами и взаимодействия.

Симптомы

При выполнении запроса в базе данных Microsoft Access, которая объединяет связанные таблицы Microsoft SQL Server из разных источников или баз данных, запрос может не возвращать никаких данных.

Однако при выполнении аналогичного запроса, ссылающегося на связанные SQL Server таблицы из одного источника или базы данных, эта проблема не возникает.

Обходной путь

Чтобы обойти эту проблему, используйте один из следующих методов:

Перезапись запроса

Вы можете переписать запрос Microsoft Access, чтобы использовать условия присоединения с ключевое слово LIKE. Оператор LIKE можно использовать для сравнения одного поля с другим полем в связанных таблицах из разных баз данных вместо ANSI JOIN.

Например, если исходный запрос указан ниже, где dbo_db1_table1 связаны с базой данных db1 SQL Server и dbo_db2_table1, dbo_db2_table2 связаны с SQL Server базой данных DB2:

SELECT 
dbo_db1_table1.db1_table1_col1, 
dbo_db2_table1.db2_table1_col1, 
dbo_db2_table2.db2_table2_col1
FROM 
(
dbo_db1_table1 INNER JOIN dbo_db2_table1 
ON
dbo_db1_table1.db1_table1_col2 = dbo_db2_table1.db2_table1_col2
) INNER JOIN dbo_db2_table2 
ON 
dbo_db2_table1.db2_table1_col3 = dbo_db2_table2.db2_table2_col3;

Перефразировать запрос следующим образом:

SELECT 
dbo_db1_table1.db1_table1_col1, 
dbo_db2_table1.db2_table1_col1, 
dbo_db2_table2.db2_table2_col1
FROM 
dbo_db1_table1, 
dbo_db2_table1 INNER JOIN dbo_db2_table2 
ON 
dbo_db2_table1.db2_table1_col3 = dbo_db2_table2.db2_table2_col3;
WHERE 
(((dbo_db1_table1.db1_table1_col2 LIKE dbo_db2_table1.db2_table1_col2));

Примечание.

Здесь синтаксис ANSI JOIN и NON ANSI JOIN отображаются в одном запросе.

Использование проекта базы данных Access

Чтобы избежать проблемы, описанной в разделе "Симптомы" этой статьи, используйте проект базы данных Microsoft Access вместо базы данных Microsoft Access. Свяжите соответствующие SQL Server таблицы в проекте базы данных Microsoft Access, а затем создайте хранимую процедуру, чтобы включить следующий запрос (где dbo_db1_table1 связан из базы данных SQL Server DB1 и dbo_db2_table1, dbo_db2_table2 связаны с SQL Server базы данных DB2):

SELECT 
dbo_db1_table1.db1_table1_col1, 
dbo_db2_table1.db2_table1_col1, 
dbo_db2_table2.db2_table2_col1
FROM 
(
dbo_db1_table1 INNER JOIN dbo_db2_table1 
ON
dbo_db1_table1.db1_table1_col2 = dbo_db2_table1.db2_table1_col2
) INNER JOIN dbo_db2_table2 
ON 
dbo_db2_table1.db2_table1_col3 = dbo_db2_table2.db2_table2_col3;

Результирующий набор появится при выполнении этой хранимой процедуры.

Импорт таблиц SQL Server

Чтобы избежать проблемы, описанной в разделе "Симптомы" этой статьи, импортируйте таблицы SQL Server в базу данных Microsoft Access вместо связывания таблиц SQL Server с базой данных Access.

Примечание.

При импорте таблиц SQL Server в базу данных Access нельзя использовать последние данные из импортированной таблицы, так как импортированная таблица содержит snapshot данных во время импорта таблицы.

Дополнительные сведения

Вы можете фильтровать данные в Microsoft Access с помощью ключевое слово JOIN в запросах. Ключевое слово JOIN классифицируется как ANSI JOIN и NON ANSI JOIN. ANSI JOIN использует ключевые слова JOIN и ON в запросе. NON ANSI JOIN использует предложение WHERE в запросе.

NON ANSI JOIN чаще использовался до эволюции ANSI 92 SQL и был перестроен до ANSI JOIN. Корпорация Майкрософт рекомендует использовать ANSI JOIN в запросах для фильтрации данных.

Ссылки

Для получения дополнительных сведений о том, как запустить мастер повышения размера, в меню Справка щелкните Справка по доступу к Microsoft Office, введите Мастер повышения размера в поле Поиск в области Помощь, а затем нажмите кнопку Начать поиск, чтобы просмотреть раздел.