2010-07-27 6 views
2

Je dois écrire RegEx en C# pour analyser la requête de jointure SQL qui est donnée en tant que chaîne. Quelqu'un peut-il m'aider s'il vous plaît parce que je suis nouveau à ce sujet. Merci beaucoupRegEx pour analyser la requête SQL en C#

c'est mon problème:

string query = @"SELECT table1.column1, table1.column2, table2.coulmn1, table2.column2 
       FROM table1 INNER JOIN table2 ON table1.column5 = table2.column5"; 

ce que je dois en fait est de mettre toutes les données importantes dans des variables distinctes, comme ceci:

string class1 = table1  
string class2 = table2  
string joinForeignKey1 = table1.column5  
string joinForeignKey2 = table2.column5  
List<string> attributes1 = table1.column1, table1.column2  
List<string> attributes2 = table2.column1, table2.column2 

// COMMENTAIRE

Je me suis rendu compte que j'ai fait une erreur dans sql query donc il y aura une clause ON.

Je peux forcer un utilisateur à me fournir la bonne syntaxe, donc ce ne sera pas un problème. La chose que je n'ai pas mentionnée est qu'il peut y avoir plus d'une clause JOIN ON (plusieurs jointures).

Merci beaucoup et j'apprécierai n'importe quelle aide.

+0

Toutes les requêtes seront-elles exactement dans ce format? Y aura-t-il une possibilité que des commentaires puissent exister dans les tables sources ou dérivées ou dans d'autres constructions qui gâcheraient les choses? Edit: Je viens de remarquer que ce que vous avez posté n'est pas valide SQL de toute façon. Il manque une clause 'ON'. –

+4

SQL est # 3 sur la liste des choses que vous ne devriez pas essayer d'analyser avec un Regex, juste derrière [HTML] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml- étiquettes autonomes/1732454 # 1732454) et [MUMPS] (http://thedailywtf.com/Articles/A_Case_of_the_MUMPS.aspx). Utilisez un analyseur SQL spécifique au dialecte, pas une regex. –

+0

@martin - Sa requête est valide SQL, n'utilisant simplement pas la norme ANSI la plus courante pour les jointures. –

Répondre

1

Personnellement, je ne recommande pas de le faire, sauf si vous avez une raison très, très valable de le faire ainsi que le plein contrôle sur la façon dont le SQL serait écrit. Tout d'abord, la syntaxe que vous avez notée pour l'instruction SQL est l'ancienne syntaxe de jointure de style et n'utilise pas la syntaxe ON plus courante.

Quelque chose comme

SELECT A.ColumnA, B.ColumnB 
FROM MyTable A 
    INNER JOIN YourTable B 
     ON (A.MyIdentity = B.MyForeignKey) 

Donc, à moins que vous pouvez forcer les utilisateurs à des requêtes d'entrée dans la vieille syntaxe que vous allez déjà sur la route d'une manière qui ne fonctionnera pas.

Si j'étais obligé de faire ce genre de chose, et que j'en ai eu le contrôle, personnellement, je ne m'occuperais pas de RegEx, étant donné que le processus est structuré. Je voudrais juste utiliser la manipulation de base de la chaîne.

5

Tirer ce sur des commentaires, car je pense qu'il est la bonne réponse ici:

SQL est n ° 3 sur la liste des choses que vous ne devriez pas essayer d'analyser avec un Regex, juste derrière HTML et MUMPS. Utilisez un dialecte spécifique, dedicated SQL parser, pas une regex.