如何正确解析SQL CREATE TABLE语句

本文关键字:CREATE TABLE 语句 SQL 何正确 | 更新日期: 2023-09-27 17:51:02

我需要解析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;

我可以很容易地隔离列定义,但随后我想拆分定义。逗号分割是不可能的,因为它们可以在嵌套的括号中。

我可以遍历字符串以计数开始和结束字符串分隔符(引号等),计数开始和结束括号,因此我可以检测"第一层"逗号并对它们进行分割。

但是我想知道是否有更有效的方法,比如使用正则表达式,但是我不太擅长它们来确定是否一些正则表达式可以匹配如此复杂的语法…

如何正确解析SQL CREATE TABLE语句

也许它的会有用。您将像使用sql解析器一样使用它。这个用于正则表达式

您正在寻找的是一个标记器。微软实际上在SQL (Microsoft. data . schema . dom)的visual studio中包含了一个。我不确定这是否只是SQL服务器,但即使这可能是ok的,这取决于你想解析什么。

此外,该链接还指向一些解析SQL的替代方法。