Я работаю разработчиком БД (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-конструкций
- Получение скрипта объекта (скрипт создания таблицы, процедуры, функции и т.п.)
- Быстрый просмотр таблицы
- Скриптование, импорт, экспорт данных
- Отдельное исполнение SQL
- Планировщик выполнения SQL (используя планировщик Windows)
- Генератор тестовых данных
- Фреймворк модульного тестирования
- Проверка синтаксиса в фоновом режиме
- Анализатор производительности запросов
- Интеграция с системой контроля версий
- Проверка правописания
- Сравнение кода
- Закладки
Основную информацию можно найти на официальном сайте и в документации (ссылки в конце статьи). А здесь я хочу рассказать о самом главной функции этой утилиты, самом ассистенте – контекстно-зависимое всплывающее окошко, которое появляется в редакторе кода.
Практика
Ассистент оказывает помощь в зависимости от места, где его вызывали, начиная от подсказок для автодополнения набираемых слов и заканчивая построения связей между таблицами. На написание запроса со связкой нескольких таблиц уходит намного меньше времени. Уже не ошибешься в названии таблиц и полей, нет необходимости помнить поля первичного ключа и поля внешних ключей для построения связей. Необходимо только указывать названия таблиц из списка, а SQL Assitant сам закончит конструкцию join на основе выбранного внешнего ключа.
Начинаю писать запрос с секции from. Указан название первой таблицы, набираю inner join и ассистент в окошке показывает список таблиц, на которые существует внешние ключи из таблицы Product. Красным подсвечены поля, по которым будет выполнено соединение двух таблиц. Выбираю соединение с таблице ProductInventory и получаю код:
SELECT
FROM
Production.Product p
INNER join Production.ProductInventory pi1 ON pi1.ProductID = p.ProductID
Далее продолжаю построение запроса, набираю inner join и ассистент показывает список таблиц, на которые существуют внешние ключи уже из таблицы ProductInventory, но так же доступны и соединения от таблицы Product.
Построение связей работает в именно в разделе 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).
Кроме информации о типе поля, для полей, составляющие первичный ключ отображается иконка в виде желтого ключика, зеленый ключик – поля внешнего ключа, молния – по полю построен индекс.
В списке доступны и другие объекты из текущей БД других БД сервера. Если выбрать поле из таблицы, которая отсутствует в разделе from, то она автоматические будет добавлена в раздел from. Остается только дописать необходимые условия связи.
Вообще, в списке могут отображаться следующие объекты их составляющие:
- локальные переменные;
- временные таблицы;
- постоянные таблицы;
- представления;
- процедуры;
- функции;
- синонимы;
- схемы;
- базы данных;
- встроенные функции.
Все зависит от контекста вызова помощника. Так, если написать конструкцию insert Production.Product то при вызове помощника можно выбрать нужные поля таблицы, для которой пишется оператор insert.
Но удобнее воспользоваться помощником в момент написания самого оператора. После того, как я написал оператор insert помощник предлагает мне выбрать объект БД.
После того, как я выберу нужную таблицу, автоматически получу вот такой код:
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(8, 2),
@ModifiedDate DATETIME
Построение вызова процедуры или функции.
Даже те объекты, которые создаются или объявляются в коде, становятся доступным в окне помощника. Учитывается создания временных таблиц, объявление переменных, в том числе табличных.
Если по коду я встречу переменную, то зажав клавишу Ctrl и кликнув по этой переменной, я перемещусь в место, где это переменная была объявлена. Но проще подвести курсор к этой переменой для получения всплывающей подсказки, в которой будет указан тип переменой. Для таблицы будет отображена ее структура и ссылки для получения скрипта на создание, быстрого просмотра содержимого и получения дополнительной информации. Системные
Для процедуры – список параметров, и т.п. для других объектов.
Для встроенных функций всплывающая подсказка с кратким описанием функции. А помощник поможет при вводе параметров.
Заключение
Вот основные функции, которыми я ежедневно пользуюсь, работая в Management Studio. Это далеко не все возможности SQL Assistant. Есть еще много интересных функций, особенностей, приятных мелочей. Но, думаю, что построение связей, контекстный список для выбора таблиц и полей таблиц уже сможет облегчить труд программиста на порядок. Кстати, SQL Assistant ведет статистику о том, сколько символов ввел пользователь и сколько символов добавил помощник, а затем из этих данных рассчитывает процент роста продуктивности.
Ссылки
Официальный сайт программы SQL Assistant
Документация (PDF, 7.2Mb)
Автор: Olegon