在C#中使用正则表达式拆分SQL语句块

时间:2008-12-04 06:45:51

标签: sql regex

我们可以编写一个正则表达式,以便在多个SQL语句中拆分存储过程。 它应该拆分更新,删除select etc语句。

编辑:我尝试解决问题http://tsqlparsergdr.codeplex.com/

3 个答案:

答案 0 :(得分:2)

如果您具有存储过程语言的语法,则可以使用ANTLR,因此解析该过程以获取语言的相关部分并进行必要的进一步处理。从头开始学习语法也应该非常容易。

需要一组正则表达式来处理整个过程。即一个正则表达式只是插入可能跨越多行的语句,并且可能有来自proc的局部变量等等。

答案 1 :(得分:2)

如果您正在使用一组已知的SQL过程,那么检查它们应该非常容易,并提出一组正则表达式来根据需要拆分它们。

如果您正在寻找可以处理任何可能的SQL过程的东西,那么正则表达式不会破解它! SQL有一个复杂的递归语法,并且总会有一些sub select,group by或literal会破坏你的基于正则表达式的解析器。

正如之前的海报所推荐的那样,你真的需要一个完整的解析器,例如可以由ANTLR或Javacc生成(是否有C#等价?)。

网上有许多可用于这些解析器生成器的SQL-92语法定义,因此很大一部分工作已经完成 - 剩下的部分 - 编写解析器应用程序逻辑 - 仍然远非微不足道。

答案 2 :(得分:1)

要解析任意存储过程,使用SQL解析器会更好。尝试用正则表达式解析任意SQL将相当于编写自己的解析器。

要解析一组特定的存储过程,正则表达式可能能够完成这项工作。如果您想要更详细的答案,您需要提供一些输入示例和所需的输出。