我想将SQL INSERT语句解析为object(表示为文本)。有一个SQL脚本文件包含:
INSERT INTO Document(Id, Name, Description ...)
VALUES('DC001', 'FOO', 'bar');
INSERT INTO DocType(Id, Name)
VALUES('DT001', 'DOCX');
以及更多表插页。
解析表名称(Document,DocType,..)的最简单方法是什么?
如果我不想计算子串,可以用RegEx吗?
const string pattern = @"INSERT INTO\s\w";
foreach (var line in FileContent)
{
var a = Regex.Match(line, pattern, RegexOptions.Compiled | RegexOptions.IgnoreCase);
if (a.Success)
{
}
}
答案 0 :(得分:1)
答案 1 :(得分:0)
Regex做了这个伎俩
private readonly IList<string> _tableList = new List<string>();
public const string TableName = @"\s*(INSERT|UPDATE)\s*(INTO|\w+)\s*(\w+)\s*(\(|VALUES|SET)";
public static readonly Regex ValidLine = new Regex(TableName, RegexOptions.Compiled | RegexOptions.IgnoreCase);
var currentTableName = ValidLine.Match(line);
var value = currentTableName.Groups[3].Value;
if (!_tableList.Contains(value))
{
_tableList.Add(value);
}
答案 2 :(得分:0)
我遇到了类似的问题,解析SQL文件并在Ruby上提出了这个通用的解析器。 它涵盖了所有情况,并将扫描结果记录到文件中以供进一步检查。也可以针对其他类型进行调整。 Take R10.rb file from here