2010-11-23 6 views
0

J'utilise OleDB pour se connecter à une base de données FoxPro DBF. J'ai besoin d'interroger une table pour tous les éléments avec column = key1 ou key2 ou key3 ...... key2000.Requête SQL Foxpro pour> 24 critères

FoxPro ne semble pas comme des requêtes longues ....

J'ai essayé à la fois:

where (col like "key1") or (col like "key2") or ..... (col like "key2000") 

et

where col in ("key1", "key2", "key3", "key4".... "key2000") 

La première solution échoue pour « requête trop complexe ". La deuxième clé échoue pour trop d'éléments dans la gamme in (apparemment le maximum est de 24). Cela semble absurde ...

Existe-t-il un moyen pour moi de construire ma requête sans plusieurs lectures?

Merci.

+0

Vous dépassez la limite de longueur de requête de FoxPro. Les moteurs OLEDB/ODBC sont des versions très légères du moteur de données FoxPro par glisser (dépouillé de à peu près tout ce qui n'est pas un moteur de données). La limite de longueur de la requête est quelque chose de stupide, comme 8k caractères (je ne me souviens pas du haut de ma tête) donc très probablement il est plus grand que ce qu'il veut voir, d'où "requête trop complexe". –

Répondre

4

Vous devez pousser vos critères dans une table de table temporaire ou critères et requête de que

Create Table Criteria (
         UserSessionId ... 
         , KeyValue .... 
         ) 


Select ... 
From MyMainTable 
    Join Criteria 
     On Criteria.KeyValue = MyMainTable.col 
      And Criteria.UserSessionId = ... 
0

Deux possibilités:

1) Utiliser plusieurs IN clauses avec 24 valeurs dans chaque

WHERE col IN (,,,,) OR col IN (,,,,) OR col IN (,,,) 

2) Mettez les valeurs 2000 dans une chaîne délimitée par des virgules et utilisez

SELECT * FROM Table WHERE ?string LIKE '%'+col+'%'