正则表达式拆分SQL脚本但忽略在评论脚本下拆分GO

时间:2013-07-11 07:13:29

标签: sql regex

我正在尝试解析一个包含创建函数和存储过程等命令的大型SQL脚本。我想在找到GO语句时将文件拆分为字符串(我想使用普通的ado.net而不是SMO来执行它)。

问题是到目前为止我还没有找到合适的正则表达式。使用简单的\bGO\b忽略大小写会将其拆分。但是也会将评论中的所有内容分开,如

/*****************************\
sql statement 1
GO
sql statement 2
GO
\****************************/

我的要求是:即使脚本包含GO语句,如果脚本处于注释状态,也不要拆分脚本。假设我的整个脚本如下:

sql statement 1
GO
/*****************************\
sql statement 2
GO
sql statement 3
GO
\****************************/
sql statement 4

预期输出应该像

First command :
sql statement 1

Second command :

/*****************************\
sql statement 2
GO
sql statement 3
GO
\****************************/
sql statement 4

对此有任何想法吗?

提前致谢。 :)

1 个答案:

答案 0 :(得分:0)

您可以删除所有评论,然后按GO分割:

/\/\**\\[^\\]*?\\\**\//    # match the comment

\/\**\\    # matches /*****\
[^\\]*?    # any text within the comments
\\\**\/    # matches \*****/

删除上面的查找并按GO拆分结果。