2009-04-05 10 views
12

Qual è il carattere jolly a più caratteri nell'operatore LIKE in Microsoft Jet e quali impostazioni lo influenzano (se esistono)? Sto supportando una vecchia applicazione ASP che gira su Microsoft Jet (su un database di Access) e usa il simbolo% nell'operatore LIKE, ma ho un cliente che apparentemente ha problemi nel suo ambiente perché il% carattere è inteso come un normale carattere, e presumo che il suo carattere jolly a più caratteri sia *. Inoltre, sono quasi sicuro che in passato ho scritto un'applicazione con query usando * anziché%. Infine, Microsoft Access (come un'applicazione) funziona anche con * e non% (ma non sono sicuro di quanto sia rilevante).Caratteri jolly di Microsoft Jet: asterisco o segno di percentuale?

Ho appena trascorso circa 20 minuti a cercare su Internet senza risultati utili e quindi ho pensato che sarebbe stato utile chiedere su StackOverflow. Qualcuno potrebbe già saperlo, ed è meglio mantenere comunque le risposte potenziali su StackOverflow di qualsiasi altro forum di discussione casuale.

risposta

14

La risposta diretta è che il comportamento dei caratteri jolly dipende dalla modalità query ANSI dell'interfaccia utilizzata.

ANSI-89 Modalità query ('modalità tradizionale') utilizza il * carattere, ANSI-92 Modalità query ('modalità di compatibilità SQL Server') utilizza il carattere %. Queste modalità sono specifiche per ACE/Jet e recano solo una somiglianza con gli standard ANSI/ISO SQL-89 e SQL-92.

L'interfaccia ADO (OLE DB) utilizza sempre la modalità query ANSI-92.

L'interfaccia DAO utilizza sempre la modalità query ANSI-89.

Quando si utilizza ODBC, la modalità di query può essere specificata in modo esplicito tramite il flag ExtendedAnsiSQL.

L'interfaccia utente di MS Access, dalla versione 2003 in poi, può utilizzare la modalità query, quindi non dare per scontato che sia l'una o l'altra in un determinato momento (ad esempio non utilizzare caratteri jolly specifici della modalità query in Regole di convalida).

sintassi ACE/Jet SQL ha un ALIKE parola, che consente i caratteri ANSI-92 Modalità query (% e _) indipendentemente dalla modalità di query dell'interfaccia, ma ha lo svantaggio lieve della parola ALIKE non essendo SQL- 92 compatibile (tuttavia ALIKE rimane altamente portatile). Lo svantaggio principale, tuttavia, è che capisco che la parola chiave ALIKE non è ufficialmente supportata (anche se non riesco a immaginare che scomparirà o avrà un comportamento alterato in qualunque momento presto).

4

Se si utilizza DAO, utilizzare l'asterisco (e il punto interrogativo per il simbolo singolo segnaposto). Se utilizzi ADO, utilizza il segno di percentuale (e il carattere di sottolineatura).

2

Accesso Jet tramite ODBC, non è chiarirmi quali caratteri jolly dovrebbero essere usati. Assumerei il naturale Jet SQL (* /?), Ma poiché non uso mai i dati Jet via ODBC non posso dire.

All'interno di Access, come dice l'articolo Remou cita, in codice, dipende dall'interfaccia di accesso ai dati che si utilizza: ADO (che nessuno dovrebbe utilizzare da Access), si utilizza%/_, mentre con DAO (Il livello di interfaccia nativo di Jet), si usano i caratteri jolly nativi di Jet (* /?).

Esiste un'eccezione nelle versioni successive di Access che esegue SQL in Access. Non so se sia stato Access 2002 o 2003 ad aggiungerlo, ma al giorno d'oggi esiste una modalità di compatibilità ANSI SQL 92 che è possibile attivare. Se lo fai, i caratteri jolly diventano%/_ invece di */?. Ma essere in grado di scegliere la modalità ANSI si applica solo all'interno di Access stesso - come una volta che ci ha informati, devi scegliere diverse librerie di interfaccia dati per utilizzare le diverse modalità SQL, con ADO usando 92 e DAO e ODBC 89.

+0

ACE/Jet ha * due * set di caratteri jolly nativi: un set nativo per la modalità query ANSI-89 e un altro set nativo per la modalità query ANSI-92. Queste modalità di query, essendo native del motore, non si applicano "solo all'interno di Access stesso". – onedaywhen

+0

Come si imposta la modalità ANSI quando si esegue SQL contro Jet? Davvero non lo so, visto che non uso mai Jet se non attraverso Access stesso. –

+0

BTW, modifico il mio post per riflettere la tua risposta. –

Problemi correlati