【问题标题】:Regex to split SQL script but ignore splitting GO under commented script正则表达式拆分 SQL 脚本,但忽略在注释脚本下拆分 GO
【发布时间】:2013-07-09 08:38:07
【问题描述】:

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

问题是到目前为止我还没有找到合适的正则表达式。使用简单的\bGO\b 忽略大小写会拆分它。但也会在评论中拆分所有 go(s),例如

/*****************************\
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

对此有什么想法吗?

提前致谢。 :)

【问题讨论】:

    标签: sql regex


    【解决方案1】:

    你可以去掉所有的cmets,然后用GO分割:

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

    删除上面的结果并将结果按GO分割。

    【讨论】:

    • 我认为他需要在 cmets 中保留 GOs。
    • 感谢 mishik 和 Radu 的回复。正如 Radu 提到的,我想保留带有未注释脚本的注释脚本。例如,如果我有一个脚本来创建一个存储过程或触发器,它可以在脚本中间注释一些脚本。在运行此脚本以创建存储过程或触发器时,我也应该保留注释脚本。我的意思是一旦在数据库中创建了存储过程或触发器,我应该能够看到存储过程/触发器脚本中的注释脚本。谢谢
    猜你喜欢
    • 2021-09-22
    • 2022-12-15
    • 2022-01-17
    • 1970-01-01
    • 2014-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-07
    相关资源
    最近更新 更多