如何正确解析SQL CREATE TABLE语句

时间:2014-03-20 11:46:12

标签: c# sql regex parsing

我需要解析SQL“CREATE TABLE”语句,以获取字段列表及其属性。

它主要是MySQL语法,应该是(带有不可改变的嵌套括号,如下例所示:

CREATE TABLE 'tablename' (
field1 INT,
field2 VARCHAR(10),
field3 FLOAT NOT NULL DEFAULT 0,
PRIMARY KEY (field1, field2),
(CONSTRAINT fk FOREIGN KEY whatever)
) options;

我可以轻松地隔离列定义,但后来我想拆分定义。不可能在逗号上拆分,因为这些可以在嵌套括号中。

我可以迭代字符串来计算开始和结束字符串分隔符(引号等),计算开始和结束括号,这样我就可以检测到“第一级”逗号并将它们分开。

但是我想知道是否有更有效的方法,例如使用正则表达式,但我不能很好地确定一些正则表达式是否可以匹配这种复杂的语法......

2 个答案:

答案 0 :(得分:0)

its 可能会有用。您将像sql解析器一样使用它。 this 用于正则表达式

答案 1 :(得分:0)

您正在寻找的是一个标记器。 Microsoft实际上包含一个作为Visual Studio for SQL(Microsoft.Data.Schema.Dom)的一部分。我不确定这是否只是SQL服务器,但即使这样也可以,这取决于您尝试解析的内容。

此外,这个link会指导您使用其他方法来解析SQL。