如何在复杂的SQL Server查询中找到匹配的BEGIN END对?

时间:2011-11-10 20:20:37

标签: sql sql-server-2005

我正在逆向设计一个巨大的存储过程。其中有大量的BEGIN ENDs,并非所有缩进都适当,多层次深,而且我有时间发现哪些BEGIN END对彼此匹配。

有没有一种简单的方法可以找出哪些配对彼此匹配。我知道在Visual Studio中你可以使用ctr +从开放式支架跳到结束支架,并且在SSMS 2008中也是如此。但我正在使用2005。

有什么想法吗?

2 个答案:

答案 0 :(得分:5)

在SQL Server 2005中,ctrl +]仍然适用于},它只适用于BEGIN END。 SQL Server 2005不区分已注释的括号和未注释的括号,因此我的解决方案是将所有BEGIN替换为BEGIN/*{*/,将所有END替换为END/*}*/。< / p>

所以我有这样的事情:

BEGIN/*{*/

    BEGIN/*{*/

    END/*}*/

END/*}*/

通过这种方式,我能够来回跳转到配对的BEGINEND

请注意BEGIN TRANSACTION命令,您不希望它们包含在替换中。

答案 1 :(得分:2)

我会使用一个好的文本编辑器(如Vim)将每个BEGIN替换为{,将END替换为},如下所示:

:%s/\<BEGIN\>/{/g
:%s/\<END\>/}/g

注意,\<\>是正则表达式元字符,以确保您不匹配完整单词以外的任何内容。

然后在正常模式下,将光标放在感兴趣的大括号上,然后按%键。 Vim会带你去匹配的支架。

完成重新格式化后,请使用原始关键字替换括号字符。