Resultaten visas inte när du kör en fråga som är länkad SQL Server från olika källor
Anteckning
Office 365 ProPlus byter namn till Microsoft 365-appar för företag. Mer information om den här ändringen finns i det här blogginlägget.
Ursprungligt KB-nummer: 824169
Anteckning
Den här artikeln gäller en Microsoft Access-databasfil (.mdb) eller en Microsoft Access-databasfil (.accdb). Kräver grundläggande makron, kodning och kompatibilitetsfärdigheter.
Symptom
När du kör en fråga i en Microsoft Access-databas som länkar länkade Microsoft SQL Server från olika källor eller databaser, kanske frågan inte returnerar några data.
Men om du kör en liknande fråga som refererar till de länkade SQL Server från samma källa eller databas uppstår inte det här problemet.
Lösning
Använd någon av följande metoder för att komma runt det här problemet:
Skriva om frågan
Du kan skriva om Microsoft Access-frågan för att använda kopplingsvillkor med nyckelordet LIKE. Du kan använda operatorn LIKE till att jämföra ett fält med det andra fältet i de länkade tabellerna från olika databaser istället för att använda ANSI JOIN.
Om den ursprungliga frågan exempelvis är följande, där dbo_db1_table1 är länkad från SQL Server-databasen DB1 och dbo_db2_table1, dbo_db2_table2 är länkade från SQL Server databas 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;
omformulera frågan så här:
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));
Anteckning
Här visas både syntaxen ANSI JOIN och ICKE ANSI JOIN i samma fråga.
Använda ett Access-databasprojekt
Använd ett Microsoft Access-databasprojekt i stället för en Microsoft Access-databas för att undvika problemet som nämns i avsnittet "Symptom" i den här artikeln. Länka rätt SQL Server-tabeller i Microsoft Access-databasprojektet och skapa sedan en lagrad procedur för att inkludera följande fråga (där dbo_db1_table1 är länkad från DB1- och SQL Server-databasen dbo_db2_table1 är dbo_db2_table2 länkade från SQL Server-databasen 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;
Resultatuppsättningen visas när du kör den här lagrade proceduren.
Importera SQL Server tabellerna
För att undvika problemet som nämns i avsnittet "Symptom" i den här artikeln importerar du SQL Server-tabellerna till Microsoft Access-databasen i stället för att länka SQL Server till Access-databasen.
Anteckning
Om du importerar SQL Server-tabellerna till Access-databasen kan du inte använda den senaste informationen i den importerade tabellen eftersom den importerade tabellen innehåller en ögonblicksbild av data när du importerar tabellen.
Mer information
Du kan filtrera data i Microsoft Access med hjälp av nyckelordet JOIN i frågorna. Nyckelordet JOIN klassificeras som ANSI JOIN och NON ANSI JOIN. ANSI JOIN använder nyckelorden JOIN och ON i frågan. NON ANSI JOIN använder en WHERE-sats i frågan.
NON ANSI JOIN användes oftare före utvecklingen av ANSI 92 för SQL och upsized till ANSI JOIN. Microsoft rekommenderar att du använder ANSI JOIN i dina frågor för att filtrera data.
Referenser
Om du vill ha mer information om hur du kör Storleksguiden klickar du på Microsoft Office Hjälp om Access på Hjälp-menyn, skriver Upp storleksguiden i rutan Sök efter i hjälpfönstret och klickar sedan på Starta sökningen för att visa ämnet.