Проверь свой T-SQL код!

    SqlCodeGuard В далёком 2005 году я менял стек технологий с Java на .NET и поначалу в Visual Studio мне очень не хватало возможностей, которыми располагала IntelliJ IDEA. Пробуя различные плагины к студии, я остановился на ReSharper'е и по сей день его использую. Недавно стало интересно, есть ли похожие продукты для работы с SQL Server, а точнее с T-SQL кодом хранимых процедур. Собственно про один такой продукт я и хочу рассказать в этой статье.

    Итак, SqlCodeGuard – это бесплатный addin для SQL Server Management Studio для статического анализа T-SQL кода. Ну и плюс пара-тройка других возможностей.


    Основные возможности



    Поиск потенциальных ошибок в коде

    Насколько я понимаю, поддерживается более сотни ситуаций различной направленности от «лучше так не делать» до «а вот тут – гарантированно свалится» и «причина тормозов – вот она».

    Поиск потенциальных ошибок в коде

    Поиск зависимостей объектов

    Позволяет определить, кто и где используется (какие таблицы использует процедура/функция/представление) и решает обратную задачу – позволяет определить – кто использует тот или иной объект, причем для таблиц и представлений – как (!) используется – выборка данных/вставка/обновление/удаление.

    Поиск зависимостей объектов

    Cписок объектов, которые не были найдены в анализируемой БД

    Побочная возможность. Позволяет, например, отслеживать опечатки в наименованиях таблиц, процедур и т.п. Как известно, SQL Server позволяет создать процедуру, которая использует несуществующую процедуру или таблицу или удалить объект, который используется в процедурах/представлениях. Такие ошибки проявятся только на этапе выполнения, так что нахождение их на этапе кодирования – немалый плюс.

    Cписок объектов, которые не были найдены в анализируемой БД

    Древовидное отображение структуры кода

    Полезно для сложных процедур – позволяет быстро просмотреть/понять логику сложного кода а также оценить сложность процедуры/функции/представления в неких единицах сложности «P». Заодно подсчитывает количество стейтментов.

    Древовидное отображение структуры кода

    Преимущества продукта...


    • Бесплатен :)
    • Большой набор правил
    • Возможность проверки как отдельного запроса так и всей БД целиком
    • Интеграция с Visual Studio и Database Project
    • Скорость (БД из 3000 объектов проверяется за 17 секунд, из 30К объектов — 150 секунд)
    • Приличный набор набор правил для поиска операторов и конструкций языка, которые объявлены устаревшими и поддержка которых будет убрана (или даже уже убрана) в ближайшее время. Позволит быстро анализировать БД при миграции на новые версии сервера.

    И, что представляет особый интерес для групповой разработки в больший компаниях – предоставляется специальное API, которое позволяет использовать возможности проверки кода в своих приложениях. Например, можно встроить проверку SQL кода в свой build-process или реализовать Checkin Policy.

    … и его недостатки


    • Недостаточная документированность. Впрочем, сам интерфейс довольно прост, но вот описать более подробно правила проверки – было бы неплохо.
    • Непонятно как интегрировать SqlCodeGuard и Database Project. Поддержка на сайте заявлена, но непонятно – а как, собственно?
    • Некоторые экзотические конструкции языка не распознаются. Также временами спотыкается на ключевых словах в качестве идентификаторов (наименования таблиц, столбцов и т.п.).

    Неплохо было бы чтобы была возможность “из коробки” использовать интеграцию с continuous integration, но пока что этого нет.

    Краткое резюме


    В целом, несмотря на определённые недостатки, SqlCodeGuard вполне пригоден к применению как отдельными разработчиками, так и, вероятно, группами разработчиков для обеспечения единой политики написания кода а также для упрощения анализа существующих БД.
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 14

      0
      Отлично! Знаю про такие штуки для оракла, а для мс-скуля как-то не встречал. Спасибо за инфу.
        0
        Расскажите плз вкратце про такие штуки для Оракла
          +2
          В Тоаде есть такая штука как PL/SQL Code Analysis. Там тоже показываются ошибки, предложения и замечания.
          Вот видео про эту фичу.
          + В самом оракле 11g есть такая штука как PL/Scope. С помощью нее можно изучать код на предмет определения используемых переменных, местах вызовов и зависимостей. Подробнее можно прочитать у xtender, тут.
            +1
            В oracle помимо pl/scope есть еще и встроенные предупреждения, активизируемые при включении параметра plsql_warnings в сессии или при компиляции конкретного объекта.
            Пример:
            DB11G/XTENDER> alter session set plsql_warnings='enable:all';
            
            Session altered.
            
            Elapsed: 00:00:00.02
            DB11G/XTENDER> create procedure t_warning is
              2  begin
              3    null;
              4  exception when others then null;
              5  end;
              6  /
            
            SP2-0804: Procedure created with compilation warnings
            
            Elapsed: 00:00:01.09
            DB11G/XTENDER> sho err
            Errors for PROCEDURE T_WARNING:
            
            LINE/COL ERROR
            -------- -----------------------------------------------------------------
            1/1      PLW-05018: unit T_WARNING omitted optional AUTHID clause; default
                     value DEFINER used
            
            4/16     PLW-06002: Unreachable code
            
          0
          Спасибо, попробуем использовать. На 2 интересных момента уже ругнулся.
            +2
            Как же мне такого тула не хватало 10 лет назад! Мы в те времена много логики делали хранимыми процедурами.

            Если не секрет, почему перешли с Java на .NET? Сам я изначально на .NET пишу, про Java мало что знаю. Поэтому, очень интересно мнение человека, который работал и с тем и с тем.
              0
              Нас выкупил Майкрософт, а выпускать продукт на Java для MC не совсем хорошо :)
              Т.е. переход был форсирован, но назад вернуться за всё это время у меня желания не возникало.
              0
              У этой тулзы первый релиз был 2012-08-22. Предполагаю что она ещё очень сырая. Инфы про создателей сайта и тулзы на сайте вообще нету. Whois инфу про владельца сайта тоже не выдаёт. Так что возможно что в тулзе троян! Качать не буду, хотя идея тулзы хорошая. Может кто-то скажет какие у тулзы есть аналоги?
                0
                Насчёт троянов сложно сказать — я лично верю своему Dr.Web, а не лезу проверять whois :)

                А вообще на утилиту я наткнулся в одном из обсуждений на sql.ru. И где-то же рядом обсуждалось, что в августе 2012 был релиз _второй_ версии продукта. А первая версия появилась чуть ли не в 2008м.
                0
                А с такой старой версией, как mssql 2k будет работать? При условии, что sa не дает разработчикам чтения master.
                Завтра с утра проверю.
                  0
                  Отпишитесь, пожалуйста, что получилось. Я не проверял под 2000 версией.
                  +1
                  Здесь про интеграцию с Database Project:

                  Q: You said that «and database project are also supported». So how can i do that?
                  A: Simply copy settings file to Database Project's root folder — and SqlCodeGuard addin will get settings from that file. Initial file can be found at %APPDATA%\SqlCodeGuard.Addin folder. Do not forget to include settings file in your source control so you'll be able to share yours settings with other team members.
                  Take a note that caption of «Select issue form» will contain name of project from which settings were taken or if settings were taken from addin's settings file.

                    0
                    Может подскажите Add-in который подсвечивает переменную под курсором по всему SQL-коду? В Notepad++ есть такая штука.
                      0
                      SQL Assistant
                      Вообще суперская утилитка, особенно join-ы писать (анализирует foreign keys и подставляет варианты)

                    Only users with full accounts can post comments. Log in, please.