Most efficient way to grab table name on next line
What would be the most efficient way to grab the schema + table name in this scenario:
SELECT [t0]. [Id], [t0]. [CODE] AS [arg0], [t0]. [DESC] AS [arg1] FROM [SchemaName]. [TableName] AS [t0] WHERE ([t0]. [Id] <> @ p0)
The result should be: "SchemaName.TableName" ....
I am using C #.
Thank!
+1
Code
source
to share
2 answers
Just some good old parsing with substrings would be my guess. Some 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
source to share
Or you can use a regular expression:
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]); }
Or if you don't want to include parentheses:
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]); }
+1
source to share