【发布时间】:2012-03-14 03:30:46
【问题描述】:
我正在尝试解析一种包含创建函数和存储过程等命令的大型 SQL 脚本。每当我找到 GO 语句时,我都想将文件拆分为字符串(我想使用普通的 ado.net 而不是 SMO 来执行它)。
问题是到目前为止我还没有找到合适的正则表达式。使用简单的 \bGO\b 忽略大小写会拆分它。但也会在评论中拆分所有 go(s),例如
--这个go也会被拆分
使用这个表达式 ^\bGO\b[^--]$ 几乎可以解决我的问题,但是当我有两个连续的 GO 时出现一些错误(无论出于何种原因,它们都在我的域后面)。
end
go
GO
这就是我的脚本中 SP 创建结束的样子。
我是用 C# 来做的
非常感谢
** 编辑 **
一位同事想出了一个解决方案,目前它适用于我的所有脚本
^\s*go\s*\r\n
【问题讨论】:
-
需要更多信息,以便我们为此提供“全能”正则表达式模式。总的来说,我会为此设置一个“沙盒”单元测试;设置一个包含您想要或不想删除的 GO 模式的文字,然后将“候选”正则表达式算法应用于每个模式,并断言生成的文本是您想要的。给定您的特定正则表达式通过或失败的测试应该是有关如何修改正则表达式的线索。如果您向我们提供更多您希望或不希望删除的模式示例,这将有助于我们为您提供帮助。
-
@Andres 有点跑题了:
^\bGO\b[^--]$真的有效吗,还是有错字?我想你可能想避免--before GO,而不是之后。 -
@KeithS 很难举个例子,因为这将应用于创建 SP、函数和视图的所有数据库源。但基本上它是一个可以非常多样化的 SQL 文件源。例如,我在 /* ... */ 之间的注释代码以及行 cmets 内的 'go' 动词方面遇到了一些问题,例如 -- 这应该去 ...