Запрос на объединение, вызывающий исключение «Недопустимое использование нулевого значения» - PullRequest
0 голосов
/ 08 июня 2009

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

К сожалению,

SELECT * 
FROM [qry vaBaseQuery-S2]
UNION ALL SELECT *
FROM [qry BaseQuery];

выбрасывает две ошибки «Недопустимое использование нуля», одну за другой. Я использовал объединение в запросах Access 2000 с нулевыми значениями, прежде чем без проблем, поэтому я немного озадачен. Кто-нибудь может подсказать, что здесь может происходить?

Дополнительная информация, которая может иметь отношение к делу:

  • Ни в одном запросе нет пустых строк

  • UNION SELECT * (без ALL) выдает ту же ошибку, но только один раз?!

Edit:

  • Использование имен полей вместо * не помогает

Edit2:

  • Учитывая, что запрос собирался быть запросом make table, все равно запускаемым из формы, я просто оставил его как два отдельных запроса (один make table и одно append) и последовательно запускаю два. Учитывая приведенные ниже ответы, это звучит гораздо меньше усилий, чем попытка понять, на что же возражает Access.

Ответы [ 3 ]

2 голосов
/ 08 июня 2009

Скорее всего, у вас есть некоторые условные (Iif ()) преобразования данных (CStr () или аналогичные) в исходных запросах. Access может оптимизировать отдельные запросы иначе, чем в union; иногда он оценивает условные части в очень странном порядке.

Как в следующем упрощенном случае:

Select Iif(int_fld is null, '0', CStr(int_fld)) As Something

Это может выдать «Недопустимое использование нуля» или нет - зависит от порядка оценки.

Редактировать: забыл написать правильное выражение, которое не выдает эту ошибку:

Select CStr(Iif(int_fld is null, 0, int_fld)) As Something
1 голос
/ 08 июня 2009

Арво писал: «иногда [ACE / Jet] оценивает условные части в очень странном порядке» - я могу ручаться за это, и не только при использовании UNION. Вот кое-что, что я недавно опубликовал в SO, где простое добавление предложения WHERE к запросу привело к тому, что механизм вычислялся в неправильном порядке, вызывая ошибку «Недопустимый вызов процедуры», и я не мог найти способ обойти это.

SQL для анализа многострочных данных?

Я предлагаю вам опубликовать код SQL из двух объектов Query. Возможно, кто-то может обнаружить что-то, с чем у двигателя могут быть проблемы.

0 голосов
/ 09 июня 2009

Как уже упоминалось в отредактированном вопросе: учитывая, что запрос в любом случае будет запросом make-таблицы, запускаемым из формы, я просто оставил его как два отдельных запроса (один-make-таблица и одно-добавление) и последовательно запускаю два.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...