2013-10-22 62 views
0

問題創建腳本。任何建議,特別是在C#中,都會有所幫助。提取表和列名使用C#

+1

SQL通常更好地通過* parsing *來處理,而正則表達式通常不會達到解析的作用(它們可以用作例如詞法分析器的*部分*,作爲解析過程的一部分) –

回答

0

這工作:

String query = "CREATE TABLE [ dbo ] . [ worktype_template ] ([ worktype_key ] [ int ] NULL , [ template_key ] [ int ] NULL) ON [ PRIMARY ]"; 
query = query.Replace(" . ", "."); 
query = query.Replace("[ ", "["); 
query = query.Replace(" ]", "]"); 
// Selects what is between parenthesizes 
String fieldsString = new String(query.SkipWhile(c => c != '(').TakeWhile(c => c != ')').ToArray()); 
// Selects the fields 
String[] fields = fieldsString.Split(',').Select(line => new Regex("\\[\\w+\\]").Match(line).Value).ToArray(); 
// Selects table name 
String tableName = new Regex("\\[\\w+\\](\\.\\[\\w+\\])*").Match(query).Value; 

我希望它能幫助。