2008-12-10 9 views
1

Quelle serait la façon la plus efficace pour saisir le schéma + nom de la table dans ce scénario:moyen le plus efficace de saisir un nom de table dans la chaîne suivante

SELECT [t0] [Id], [t0].. [CODE] AS [arg0], [t0]. [DESC] AS [arg1] à partir de [SchemaName]. [TableName] AS [t0] WHERE ([t0]. [Id] <> @ p0)

Le résultat doit être: "nomDuSchema.nomDeTable" ....

J'utilise C#.

Merci!

+0

Merci les gars! Résolu le problème! –

Répondre

1

Juste une bonne vieille chaîne avec l'analyse syntaxique de sous-chaînes serait ma conjecture. Une partie du code:

string q = @"SELECT [t0].[Id], [t0].[CODE] AS [arg0], [t0].[DESC] AS [arg1] FROM [SchemaName].[TableName] AS [t0] WHERE ([t0].[Id] <> @p0)"; 
      int fromIndex = q.IndexOf("FROM")+5; 
      int asIndex = q.IndexOf("AS",fromIndex); 
      q = q.Substring(fromIndex, asIndex - fromIndex); 
1

Ou vous pouvez utiliser une expression régulière:

string data = "SELECT [t0].[Id], [t0].[CODE] AS [arg0], [t0].[DESC] AS [arg1] FROM [SchemaName].[TableName] AS [t0] WHERE ([t0].[Id] <> @p0)"; 
Regex re = new Regex(@"FROM ((\[\w+\]\.?){2}) AS"); 
Match m = re.Match(data); 
if (m.Success){ Console.WriteLine(m.Groups[1]); } 

Ou si vous ne voulez pas inclure les parenthèses:

string data = "SELECT [t0].[Id], [t0].[CODE] AS [arg0], [t0].[DESC] AS [arg1] FROM [SchemaName].[TableName] AS [t0] WHERE ([t0].[Id] <> @p0)"; 
Regex re = new Regex(@"FROM \[(\w+)\]\.\[(\w+)\]\ AS"); 
Match m = re.Match(data); 
if (m.Success){ Console.WriteLine("{0}.{1}", m.Groups[1], m.Groups[2]); } 
+0

En outre, vous pouvez étendre regex pour inclure JOIN et gérer plusieurs espaces blancs – PiRX

Questions connexes