In Access database engine SQL syntax, to use the %
wildcard character EITHER you must be using ANSI-92 Query Mode OR use the ALIKE
keyword in place of the LIKE
keyword.
For details of ANSI-92 Query Mode see About ANSI SQL query mode (MDB) in the Access2003 Help (the same will apply to ACE in Access2007 but they removed the topic from the Access2007 Help for some reason). If you doing this in code you will need to use OLE DB e.g. ADO classic in VBA.
For the ALIKE
keyword... you won't find much. It's one of those officially undocumented features, meaning there is an element of risk that it may be removed from a future revision to the Access database engine. Personally, I'd take that risk over having to explicitly code for both ANSI-89 Query Mode and ANSI-92 Query Mode as is necessary for Validation Rules and CHECK
constraints (see example below). Coding for both can be done but it is more long winded and tricky to get right i.e. has more immediate risk if you get it wrong.
That's the answer. Now for the 'solution'...
Clearly, if you need to perform that kind of query on emp_id then the domain is wrong i.e. it shouldn't be a numeric field.
Cure the disease: change the schema to make this a text field, adding a domain rule ensuring it only contains numeric characters e.g.
CHECK (emp_id NOT LIKE '%[^0-9]%')
EDIT the 'Jet' tag has now been added. The above CHECK
constraint needs to be rewritten because the Access database engine has its own syntax: replace the ^
character with !
. Also, to make this compatible with both ANSI-89 Query Mode and ANSI-92 Query Mode, use the ALIKE keyword i.e.
CHECK (emp_id NOT ALIKE '%[!0-9]%')