Если вам абсолютно необходимо иметь решение Access SQL для составления списка, рассмотрите что-то отличное от UNION
из 50 источников данных.Доступ не позволяет вам UNION
неограниченное количество источников данных, но я не помню, что это за предел.И даже если это позволит вам UNION
50, я все равно не буду этого делать.
Я протестировал этот в Access 2010, и он дает результат, который, я думаю, вы ищете.Поскольку вы продемонстрировали, что у вас есть разрешение на чтение для MsysObjects
, оно также должно работать для вас.
SELECT
sub.Name
FROM
(
SELECT
m.Name,
IIf(
m.Name ALike '[0-9][0-9][_]query' AND m.Type=5,
DCount('*', m.Name),
0
) AS non_empty_target_query
FROM MsysObjects AS m
) AS sub
WHERE sub.non_empty_target_query=True
ORDER BY sub.Name;
Выражение IIf()
является ключом к этому запросу.Говоря по-человечески, он говорит, что если объект является запросом, а его имя начинается с 2 цифр, за которыми следует знак подчеркивания, за которым следует «запрос», возвращает количество строк из этого запроса;в противном случае просто верните ноль.
Затем родительский запрос отфильтровывает те строки, где non_empty_target_query
равен нулю (False), оставляя только строки, содержащие имена ваших «непустых» запросов.