Инструментарий разработчика: SQL Assistant

в 13:44, , рубрики: Без рубрики

Я работаю разработчиком БД (MS SQL) и большая часть моей работы, это написание кода на T-SQL. Работая в Query Analyzer, а затем в Management Studio (2005, 2008, 2008R2) мне очень сильно не хватало функций редактора и дополнительных функций среды разработки, направленных именно на процесс написания кода, построения запросов и т.п… По сравнению с MS Visual Studio или Embarcadero RAD Studio, что мог предложить Query Analyzer? Изменить отступ блока кода, изменить регистр выделенного текста, закомментировать и отменить комментирование блока кода, перетащить название таблицы или поля (полей) в окно редактора, заскриптовать выбранный объект. А ведь так не хватало полноценного IntelliSense. Всех этих удобных функций по автодополнению, интерактивных подсказок к набираемому коду, выбор из списка объектов и т.п.

С выходом MS Management Studio 2005 ситуация не изменилась. И только в MS Management 2008 появился Transact-SQL IntelliSense. Да, появилось автозавершение набираемого слова, предоставление списка объектов БД и полей таблицы, подсветка синтаксических пар (begin… end, ()). Но уже до этого я стал пользоваться сторонней утилитой SQL Assistant от SoftTree Technologies. На фоне возможностей, которые предоставляет SQL Assistant родной IntelliSense просто дубовый. А разве можно получить что-то большего, ведь это SQL, а не объектно-ориентированный язык? Можно! В этой статье я хотел бы рассказать об утилите SQL Assistant, а точнее о функция и приемах, которые я использую при написании SQL-кода.

Теория

SQL Assistant – инструментарий для разработчиков и администраторов баз данных. Может использоваться при работе над проектами любой степени сложности, от небольших баз данных до комплексных корпоративных систем. Программное обеспечение оказывается готовым к эксплуатации немедленно после установки и не предполагает приостановки текущих рабочих процессов. Инструментарий повышает продуктивность труда SQL-разработчиков и гарантирует высокое качество кода. В том числе в состав пакета входят превосходные инструменты для проверки правильности SQL-синтаксиса, механизмы автозавершения синтаксических конструкций, средства быстрой навигации по программному коду и многое другое. В распоряжении пользователей также окажется интегрированный блок проверки правописания. Среди других достоинств продукта стоит упомянуть поддержку наиболее распространенных СУБД (Oracle, SQL Server, DB2, MySQL, Sybase ASE, Sybase ASA, MS Access и соответствующих SQL-диалектов).

SQL Assistant встраивается в Management Studio и через пункт главного меню или через контекстное меню редактора кода доступны все его команды.

Инструментарий разработчика: SQL Assistant

Вот основные функции:

  • Ассистент ввода кода
  • Навигация по коду (структура кода, карта документа)
  • Форматирование кода
  • Шаблоны и генераторы кода
  • Функции рефакторинга
  • Интерактивная система помощи ввода SQL-конструкций
  • Получение скрипта объекта (скрипт создания таблицы, процедуры, функции и т.п.)
  • Быстрый просмотр таблицы
  • Скриптование, импорт, экспорт данных
  • Отдельное исполнение SQL
  • Планировщик выполнения SQL (используя планировщик Windows)
  • Генератор тестовых данных
  • Фреймворк модульного тестирования
  • Проверка синтаксиса в фоновом режиме
  • Анализатор производительности запросов
  • Интеграция с системой контроля версий
  • Проверка правописания
  • Сравнение кода
  • Закладки

Основную информацию можно найти на официальном сайте и в документации (ссылки в конце статьи). А здесь я хочу рассказать о самом главной функции этой утилиты, самом ассистенте – контекстно-зависимое всплывающее окошко, которое появляется в редакторе кода.

Инструментарий разработчика: SQL Assistant

Практика

Ассистент оказывает помощь в зависимости от места, где его вызывали, начиная от подсказок для автодополнения набираемых слов и заканчивая построения связей между таблицами. На написание запроса со связкой нескольких таблиц уходит намного меньше времени. Уже не ошибешься в названии таблиц и полей, нет необходимости помнить поля первичного ключа и поля внешних ключей для построения связей. Необходимо только указывать названия таблиц из списка, а SQL Assitant сам закончит конструкцию join на основе выбранного внешнего ключа.

Инструментарий разработчика: SQL Assistant

Начинаю писать запрос с секции from. Указан название первой таблицы, набираю inner join и ассистент в окошке показывает список таблиц, на которые существует внешние ключи из таблицы Product. Красным подсвечены поля, по которым будет выполнено соединение двух таблиц. Выбираю соединение с таблице ProductInventory и получаю код:

SELECT
FROM
  Production.Product p
  INNER join Production.ProductInventory pi1 ON pi1.ProductID = p.ProductID

Далее продолжаю построение запроса, набираю inner join и ассистент показывает список таблиц, на которые существуют внешние ключи уже из таблицы ProductInventory, но так же доступны и соединения от таблицы Product.

Инструментарий разработчика: SQL Assistant

Построение связей работает в именно в разделе from, т.е. и для select, insert, delete, update. Если необходимо построить соединение между таблицам не связанными внешним ключом, то необходимо указать эти таблицы и SQL Assistant может предложить построить связь по полям с одинаковыми названиями.

Полученный код запроса:

SELECT
FROM
  Production.Product p
  INNER join Production.ProductInventory pi1 ON pi1.ProductID = p.ProductID
  INNER join Production.Location l ON l.LocationID = pi1.LocationID
  INNER join Production.ProductReview pr ON pr.ProductID = p.ProductID

Приводиться в нужный вид с помощью функции форматирования. Правила форматирования кода настраиваемые.

SELECT
FROM
  Production.Product p
  INNER join Production.ProductInventory pi1
    ON
      pi1.ProductID = p.ProductID
  INNER join Production.Location l
    ON
      l.LocationID = pi1.LocationID
  INNER join Production.ProductReview pr
    ON
      pr.ProductID = p.ProductID

Переместив курсор в раздел select ассистент покажет подсказку для выбора полей, которые будут включены в выборку, из таблиц, перечисленных в разделе from. Такой же принцип в любом разделе запроса (where, group by, order by).

Инструментарий разработчика: SQL Assistant

Кроме информации о типе поля, для полей, составляющие первичный ключ отображается иконка в виде желтого ключика, зеленый ключик – поля внешнего ключа, молния – по полю построен индекс.
В списке доступны и другие объекты из текущей БД других БД сервера. Если выбрать поле из таблицы, которая отсутствует в разделе from, то она автоматические будет добавлена в раздел from. Остается только дописать необходимые условия связи.

Вообще, в списке могут отображаться следующие объекты их составляющие:

  • локальные переменные;
  • временные таблицы;
  • постоянные таблицы;
  • представления;
  • процедуры;
  • функции;
  • синонимы;
  • схемы;
  • базы данных;
  • встроенные функции.

Все зависит от контекста вызова помощника. Так, если написать конструкцию insert Production.Product то при вызове помощника можно выбрать нужные поля таблицы, для которой пишется оператор insert.

Инструментарий разработчика: SQL Assistant

Но удобнее воспользоваться помощником в момент написания самого оператора. После того, как я написал оператор insert помощник предлагает мне выбрать объект БД.

Инструментарий разработчика: SQL Assistant

После того, как я выберу нужную таблицу, автоматически получу вот такой код:

INSERT INTO Production.Location
(
  -- LocationID -- this column value is auto-generated
  Name,
  CostRate,
  Availability,
  ModifiedDate
)
VALUES
(
  /*{ Name }*/,
  /*{ CostRate }*/,
  /*{ Availability }*/,
  /*{ ModifiedDate }*/
)

Похожим образом получается и с оператором update. Автоматически генерируется код при аналогичной последовательности ввода:

UPDATE Production.Location
SET
  -- LocationID = ? -- this column value is auto-generated
  Name = ?,
  CostRate = ?,
  Availability = ?,
  ModifiedDate = ?

Можно даже объявить переменные на основе структуры таблицы. Набираю declare и выбираю таблицу Location, в результате формируется код:

DECLARE
  @LocationID       SMALLINT,
  @Name             name,
  @CostRate         SMALLMONEY,
  @Availability     DECIMAL(82),
  @ModifiedDate     DATETIME

Построение вызова процедуры или функции.

Инструментарий разработчика: SQL Assistant

Даже те объекты, которые создаются или объявляются в коде, становятся доступным в окне помощника. Учитывается создания временных таблиц, объявление переменных, в том числе табличных.

Инструментарий разработчика: SQL Assistant
Инструментарий разработчика: SQL Assistant

Если по коду я встречу переменную, то зажав клавишу Ctrl и кликнув по этой переменной, я перемещусь в место, где это переменная была объявлена. Но проще подвести курсор к этой переменой для получения всплывающей подсказки, в которой будет указан тип переменой. Для таблицы будет отображена ее структура и ссылки для получения скрипта на создание, быстрого просмотра содержимого и получения дополнительной информации. Системные
Для процедуры – список параметров, и т.п. для других объектов.

Инструментарий разработчика: SQL Assistant
Инструментарий разработчика: SQL Assistant
Инструментарий разработчика: SQL Assistant

Для встроенных функций всплывающая подсказка с кратким описанием функции. А помощник поможет при вводе параметров.

Инструментарий разработчика: SQL Assistant

Заключение

Вот основные функции, которыми я ежедневно пользуюсь, работая в Management Studio. Это далеко не все возможности SQL Assistant. Есть еще много интересных функций, особенностей, приятных мелочей. Но, думаю, что построение связей, контекстный список для выбора таблиц и полей таблиц уже сможет облегчить труд программиста на порядок. Кстати, SQL Assistant ведет статистику о том, сколько символов ввел пользователь и сколько символов добавил помощник, а затем из этих данных рассчитывает процент роста продуктивности.

Ссылки

Официальный сайт программы SQL Assistant
Документация (PDF, 7.2Mb)

Автор: Olegon

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js