2017-02-09 3 views
0

Я борюсь с IF в инструкции WHERE. В моем запросе доступа используется параметр. Оператор WHERE должен выполняться только в том случае, если параметр имеет значение, иначе его следует игнорировать. Это то, что я прямо сейчас:IF в выражении WHERE исключает слишком много записей (Access)

PARAMETERS varMachineID Text (25); 
SELECT RequestNumber 
FROM Requests 
WHERE (MachineID=IIf([varMachineID]<>"",[varMachineID],MachineID)); 

Это заявление должно работать нормально. Однако таблица также может содержать записи с пустым идентификатором MachineID. С помощью этого оператора WHERE эти записи теперь исключаются Query. Этого не должно быть. Я попробовал инструкцию OR в ELSE, но затем запрос становится слишком сложным для обработки.

Надеюсь, у кого-то есть решение для меня.

Спасибо.

пс. Это урезанный пример, запрос, который у меня содержит, содержит больше параметров и больше условий в инструкции WHERE.

ответ

0

Я предполагаю, что «пустой» означает NULL. Если да, то я думаю, что вы хотите:

WHERE MachineID = varMachineID or varMachineID is NULL 

Это подберет все записи при varMachineId является NULL. Он будет выбирать только соответствующие, если это не NULL.

+0

Иногда решение может быть это просто. Большое спасибо! – Karin

0

Это, вероятно, это вам нужно:

WHERE 
    MachineID Is Null Or 
    MachineID = IIf(varMachineID = "", MachineID, varMachineID); 
Смежные вопросы