Как найти совпадающие пары BEGIN END в сложном запросе SQL Server?

#sql #sql-server-2005

#sql #sql-server-2005

Вопрос:

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

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

Есть идеи?

Комментарии:

1. Я могу порекомендовать вам отформатировать SQL-код с помощью такого инструмента, как: dpriver.com/pp/sqlformat.htm

2. @Lamak: Спасибо, но на самом деле это не решило мою проблему. Отличный инструмент, хотя.

Ответ №1:

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

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

 BEGIN/*{*/

    BEGIN/*{*/

    END/*}*/

END/*}*/
  

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

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

Комментарии:

1. Отличная идея. Кроме того, убедитесь, что вы проверили, не является ли конец частью «СЛУЧАЯ, КОГДА». Если вы используете Azure Data Studio или аналогичный, ярлык для перемещения по скобкам — Ctrl Shift

Ответ №2:

Я бы использовал хороший текстовый редактор (например, Vim), чтобы заменить каждое НАЧАЛО на { и КОНЕЦ на } , вот так:

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

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

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

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