Как найти совпадающие пары BEGIN END в сложном запросе SQL Server? - PullRequest
2 голосов
/ 11 ноября 2011

Я реконструирую гигантскую хранимую процедуру. В нем есть тонны BEGIN END, не все с отступом должным образом, много уровней в глубину, и у меня есть чертовски много времени, чтобы найти, какие пары BEGIN END соответствуют друг другу.

Есть ли простой способ узнать, какие пары соответствуют друг другу. Я знаю, что в Visual Studio вы можете перейти с открывающей скобки на закрывающую с помощью ctr +] и то же самое в SSMS 2008. Но я использую 2005.

Есть идеи?

Ответы [ 2 ]

5 голосов
/ 11 ноября 2011

В SQL Server 2005 ctrl +] все еще работает для }, просто не работает для BEGIN END. SQL Server 2005 не различает закомментированные скобки и незакомментированные скобки, поэтому я решил заменить все BEGIN на BEGIN/*{*/ и все END на END/*}*/.

Итак, у меня было что-то вроде этого:

BEGIN/*{*/

    BEGIN/*{*/

    END/*}*/

END/*}*/

С этим я смог прыгнуть назад и вперед к парным BEGIN и END.

Обратите внимание на команды BEGIN TRANSACTION, но вы не хотите, чтобы они были включены в замену.

2 голосов
/ 11 ноября 2011

Я бы использовал хороший текстовый редактор (например, Vim), чтобы заменить каждый BEGIN на { и END на }, например:

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

Обратите внимание, \< и \> являются метасимволами регулярных выражений, чтобы гарантировать, что вы не найдете ничего, кроме полных слов.

Затем в обычном режиме наведите курсор на интересующий символ скобки и нажмите клавишу %.Vim перенесет вас к соответствующей скобке.

Когда вы закончите переформатирование к своему удовлетворению, замените фигурные скобки их исходными ключевыми словами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...