我在这里有一个关于 SQL 问题的正则表达式。对于以下形式的 SQL 联合查询:
Select a From (subquery1) union (subquery2)
我虽然这将是一个简单的正则表达式来匹配From 子句中的内容,但我有以下正则表达式:
\((?<subquery1>.*)\) union \((?<subquery2>.*)\)
但后来我发现事情可能会递归,2子查询也可能再次包含联合案例,例如:
(
(select a from b) union (select x from b)
) union (
(select a from b) union (select x from b)
)
这完全搞砸了我的正则表达式捕获,如果它是非贪婪的,subquery1 将捕获第一个联合而不是第二个联合,如果它是贪婪的,它将捕获直到第三个联合的所有内容。我也尝试过添加非贪婪?运算符都捕获子句,但那里没有运气。
求指教,万分感谢
PS:我有一个自定义数据库位于 MS SQL server 2012 之上,我需要解析标准 SQL 选择查询,并对表名进行了一些修改;对几列进行数值运算。从而生成一个经过修改但仍然是标准的 SQL 查询,并将其传递给 SQL 服务器