Sql код: Основные команды SQL, которые должен знать каждый программист

Содержание

Проверь свой T-SQL код! / Хабр

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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


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

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

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


В целом, несмотря на определённые недостатки, SqlCodeGuard вполне пригоден к применению как отдельными разработчиками, так и, вероятно, группами разработчиков для обеспечения единой политики написания кода а также для упрощения анализа существующих БД.

sql-код — с английского на русский

  • SQL-92 — SQL 92  третья версия языка запросов к базам данных SQL. В отличие от стандарта SQL 89, третья версия стала весьма существенным обновлением языка. За исключением некоторых мелких противоречий стандарт SQL 89 практически полностью совместим… …   Википедия

  • SQL-инъекция — Внедрение SQL кода (англ. SQL injection) один из распространённых способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL, в зависимости от типа используемой СУБД и условий внедрения,… …   Википедия

  • SQL injection — Внедрение SQL кода (англ. SQL injection) один из распространённых способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL, в зависимости от типа используемой СУБД и условий внедрения,… …   Википедия

  • SQL инъекция — Внедрение SQL кода (англ. SQL injection) один из распространённых способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL, в зависимости от типа используемой СУБД и условий внедрения,… …   Википедия

  • SQL Server 2005 — Microsoft SQL Server Тип Реляционная СУБД Разработчик ОС Microsoft Windows Версия 2008 6 августа 2008 Лицензия …   Википедия

  • SQL Server 2008 — Microsoft SQL Server Тип Реляционная СУБД Разработчик ОС Microsoft Windows Версия 2008 6 августа 2008 Лицензия …   Википедия

  • SQL Server 2000 — Microsoft SQL Server Тип Реляционная СУБД Разработчик ОС Microsoft Windows Версия 2008 6 августа 2008 Лицензия …   Википедия

  • Microsoft SQL Server — Тип Реляционная СУБД Разработчик Sybase, Ashton Tate, Microsoft …   Википедия

  • Инъекция SQL — Внедрение SQL кода (англ. SQL injection) один из распространённых способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL, в зависимости от типа используемой СУБД и условий внедрения,… …   Википедия

  • Внедрение SQL-кода — (англ. SQL injection)  один из распространённых способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL кода. Внедрение SQL, в зависимости от типа используемой СУБД и условий… …   Википедия

  • Международный идентификационный код ценной бумаги — (англ. International Securities Identification Number, общепринятое сокращение  ISIN)  12 разрядный буквенно цифровой код, однозначно идентифицирующий ценную бумагу. ISIN присваивается следующим финансовым инструментам: акции, паи …   Википедия

  • sql-код — со всех языков на русский

  • SQL-92 — SQL 92  третья версия языка запросов к базам данных SQL. В отличие от стандарта SQL 89, третья версия стала весьма существенным обновлением языка. За исключением некоторых мелких противоречий стандарт SQL 89 практически полностью совместим… …   Википедия

  • SQL-инъекция — Внедрение SQL кода (англ. SQL injection) один из распространённых способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL, в зависимости от типа используемой СУБД и условий внедрения,… …   Википедия

  • SQL injection — Внедрение SQL кода (англ. SQL injection) один из распространённых способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL, в зависимости от типа используемой СУБД и условий внедрения,… …   Википедия

  • SQL инъекция

    — Внедрение SQL кода (англ. SQL injection) один из распространённых способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL, в зависимости от типа используемой СУБД и условий внедрения,… …   Википедия

  • SQL Server 2005 — Microsoft SQL Server Тип Реляционная СУБД Разработчик ОС Microsoft Windows Версия 2008 6 августа 2008 Лицензия …   Википедия

  • SQL Server 2008 — Microsoft SQL Server Тип Реляционная СУБД Разработчик ОС Microsoft Windows Версия 2008 6 августа 2008 Лицензия …   Википедия

  • SQL Server 2000 — Microsoft SQL Server Тип Реляционная СУБД Разработчик ОС Microsoft Windows Версия 2008 6 августа 2008 Лицензия …   Википедия

  • Microsoft SQL Server — Тип Реляционная СУБД Разработчик Sybase, Ashton Tate, Microsoft …   Википедия

  • Инъекция SQL — Внедрение SQL кода (англ. SQL injection) один из распространённых способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL, в зависимости от типа используемой СУБД и условий внедрения,… …   Википедия

  • Внедрение SQL-кода — (англ. SQL injection)  один из распространённых способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL кода. Внедрение SQL, в зависимости от типа используемой СУБД и условий… …   Википедия

  • Международный идентификационный код ценной бумаги — (англ. International Securities Identification Number, общепринятое сокращение  ISIN)  12 разрядный буквенно цифровой код, однозначно идентифицирующий ценную бумагу. ISIN присваивается следующим финансовым инструментам: акции, паи …   Википедия

  • sql-код — со всех языков на русский

  • SQL-92 — SQL 92  третья версия языка запросов к базам данных SQL. В отличие от стандарта SQL 89, третья версия стала весьма существенным обновлением языка. За исключением некоторых мелких противоречий стандарт SQL 89 практически полностью совместим… …   Википедия

  • SQL-инъекция — Внедрение SQL кода (англ. SQL injection) один из распространённых способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL, в зависимости от типа используемой СУБД и условий внедрения,… …   Википедия

  • SQL injection — Внедрение SQL кода (англ. SQL injection) один из распространённых способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL, в зависимости от типа используемой СУБД и условий внедрения,… …   Википедия

  • SQL инъекция — Внедрение SQL кода (англ. SQL injection) один из распространённых способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL, в зависимости от типа используемой СУБД и условий внедрения,… …   Википедия

  • SQL Server 2005 — Microsoft SQL Server Тип Реляционная СУБД Разработчик ОС Microsoft Windows Версия 2008 6 августа 2008 Лицензия …   Википедия

  • SQL Server 2008 — Microsoft SQL Server Тип Реляционная СУБД Разработчик ОС Microsoft Windows Версия 2008 6 августа 2008 Лицензия …   Википедия

  • SQL Server 2000 — Microsoft SQL Server Тип Реляционная СУБД Разработчик ОС Microsoft Windows Версия 2008 6 августа 2008 Лицензия …   Википедия

  • Microsoft SQL Server — Тип Реляционная СУБД Разработчик Sybase, Ashton Tate, Microsoft …   Википедия

  • Инъекция SQL — Внедрение SQL кода (англ. SQL injection) один из распространённых способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL, в зависимости от типа используемой СУБД и условий внедрения,… …   Википедия

  • Внедрение SQL-кода — (англ. SQL injection)  один из распространённых способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL кода. Внедрение SQL, в зависимости от типа используемой СУБД и условий… …   Википедия

  • Международный идентификационный код ценной бумаги — (англ. International Securities Identification Number, общепринятое сокращение  ISIN)  12 разрядный буквенно цифровой код, однозначно идентифицирующий ценную бумагу. ISIN присваивается следующим финансовым инструментам: акции, паи …   Википедия

  • sql-код — со всех языков на русский

  • SQL-92 — SQL 92  третья версия языка запросов к базам данных SQL. В отличие от стандарта SQL 89, третья версия стала весьма существенным обновлением языка. За исключением некоторых мелких противоречий стандарт SQL 89 практически полностью совместим… …   Википедия

  • SQL-инъекция — Внедрение SQL кода (англ. SQL injection) один из распространённых способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL, в зависимости от типа используемой СУБД и условий внедрения,… …   Википедия

  • SQL injection — Внедрение SQL кода (англ. SQL injection) один из распространённых способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL, в зависимости от типа используемой СУБД и условий внедрения,… …   Википедия

  • SQL инъекция — Внедрение SQL кода (англ. SQL injection) один из распространённых способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL, в зависимости от типа используемой СУБД и условий внедрения,… …   Википедия

  • SQL Server 2005 — Microsoft SQL Server Тип Реляционная СУБД Разработчик ОС Microsoft Windows Версия 2008 6 августа 2008 Лицензия …   Википедия

  • SQL Server 2008 — Microsoft SQL Server Тип Реляционная СУБД Разработчик ОС Microsoft Windows Версия 2008 6 августа 2008 Лицензия …   Википедия

  • SQL Server 2000 — Microsoft SQL Server Тип Реляционная СУБД Разработчик ОС Microsoft Windows Версия 2008 6 августа 2008 Лицензия …   Википедия

  • Microsoft SQL Server — Тип Реляционная СУБД Разработчик Sybase, Ashton Tate, Microsoft …   Википедия

  • Инъекция SQL — Внедрение SQL кода (англ. SQL injection) один из распространённых способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL, в зависимости от типа используемой СУБД и условий внедрения,… …   Википедия

  • Внедрение SQL-кода — (англ. SQL injection)  один из распространённых способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL кода. Внедрение SQL, в зависимости от типа используемой СУБД и условий… …   Википедия

  • Международный идентификационный код ценной бумаги — (англ. International Securities Identification Number, общепринятое сокращение  ISIN)  12 разрядный буквенно цифровой код, однозначно идентифицирующий ценную бумагу. ISIN присваивается следующим финансовым инструментам: акции, паи …   Википедия

  • sql-код — со всех языков на русский

  • SQL-92 — SQL 92  третья версия языка запросов к базам данных SQL. В отличие от стандарта SQL 89, третья версия стала весьма существенным обновлением языка. За исключением некоторых мелких противоречий стандарт SQL 89 практически полностью совместим… …   Википедия

  • SQL-инъекция — Внедрение SQL кода (англ. SQL injection) один из распространённых способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL, в зависимости от типа используемой СУБД и условий внедрения,… …   Википедия

  • SQL injection — Внедрение SQL кода (англ. SQL injection) один из распространённых способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL, в зависимости от типа используемой СУБД и условий внедрения,… …   Википедия

  • SQL инъекция — Внедрение SQL кода (англ. SQL injection) один из распространённых способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL, в зависимости от типа используемой СУБД и условий внедрения,… …   Википедия

  • SQL Server 2005 — Microsoft SQL Server Тип Реляционная СУБД Разработчик ОС Microsoft Windows Версия 2008 6 августа 2008 Лицензия …   Википедия

  • SQL Server 2008 — Microsoft SQL Server Тип Реляционная СУБД Разработчик ОС Microsoft Windows Версия 2008 6 августа 2008 Лицензия …   Википедия

  • SQL Server 2000 — Microsoft SQL Server Тип Реляционная СУБД Разработчик ОС Microsoft Windows Версия 2008 6 августа 2008 Лицензия …   Википедия

  • Microsoft SQL Server — Тип Реляционная СУБД Разработчик Sybase, Ashton Tate, Microsoft …   Википедия

  • Инъекция SQL — Внедрение SQL кода (англ. SQL injection) один из распространённых способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL, в зависимости от типа используемой СУБД и условий внедрения,… …   Википедия

  • Внедрение SQL-кода — (англ. SQL injection)  один из распространённых способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL кода. Внедрение SQL, в зависимости от типа используемой СУБД и условий… …   Википедия

  • Международный идентификационный код ценной бумаги — (англ. International Securities Identification Number, общепринятое сокращение  ISIN)  12 разрядный буквенно цифровой код, однозначно идентифицирующий ценную бумагу. ISIN присваивается следующим финансовым инструментам: акции, паи …   Википедия

  • sql-код — со всех языков на русский

  • SQL-92 — SQL 92  третья версия языка запросов к базам данных SQL. В отличие от стандарта SQL 89, третья версия стала весьма существенным обновлением языка. За исключением некоторых мелких противоречий стандарт SQL 89 практически полностью совместим… …   Википедия

  • SQL-инъекция — Внедрение SQL кода (англ. SQL injection) один из распространённых способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL, в зависимости от типа используемой СУБД и условий внедрения,… …   Википедия

  • SQL injection — Внедрение SQL кода (англ. SQL injection) один из распространённых способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL, в зависимости от типа используемой СУБД и условий внедрения,… …   Википедия

  • SQL инъекция — Внедрение SQL кода (англ. SQL injection) один из распространённых способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL, в зависимости от типа используемой СУБД и условий внедрения,… …   Википедия

  • SQL Server 2005 — Microsoft SQL Server Тип Реляционная СУБД Разработчик ОС Microsoft Windows Версия 2008 6 августа 2008 Лицензия …   Википедия

  • SQL Server 2008 — Microsoft SQL Server Тип Реляционная СУБД Разработчик ОС Microsoft Windows Версия 2008 6 августа 2008 Лицензия …   Википедия

  • SQL Server 2000 — Microsoft SQL Server Тип Реляционная СУБД Разработчик ОС Microsoft Windows Версия 2008 6 августа 2008 Лицензия …   Википедия

  • Microsoft SQL Server — Тип Реляционная СУБД Разработчик Sybase, Ashton Tate, Microsoft …   Википедия

  • Инъекция SQL — Внедрение SQL кода (англ. SQL injection) один из распространённых способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL, в зависимости от типа используемой СУБД и условий внедрения,… …   Википедия

  • Внедрение SQL-кода — (англ. SQL injection)  один из распространённых способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL кода. Внедрение SQL, в зависимости от типа используемой СУБД и условий… …   Википедия

  • Международный идентификационный код ценной бумаги — (англ. International Securities Identification Number, общепринятое сокращение  ISIN)  12 разрядный буквенно цифровой код, однозначно идентифицирующий ценную бумагу. ISIN присваивается следующим финансовым инструментам: акции, паи …   Википедия

  • Учебное пособие по SQL

    SQL — стандартный язык для хранения, обработки и извлечения данных. в базах данных.

    Наш учебник по SQL научит вас использовать SQL в: MySQL, SQL Server, MS Access, Oracle, Sybase, Informix, Postgres и другие системы баз данных.

    Начните изучать SQL прямо сейчас »

    Примеры в каждой главе

    С помощью нашего онлайн-редактора SQL вы можете редактировать операторы SQL и щелкать кнопку, чтобы просмотреть результат.

    Щелкните кнопку «Попробуйте сами», чтобы увидеть, как это работает.


    Упражнения SQL



    Примеры SQL

    Учись на примерах! Этот учебник дополняет все пояснения поясняющими примерами.

    Просмотреть все примеры SQL


    Тест-викторина по SQL

    Проверьте свои навыки SQL в W3Schools!

    Начать тест по SQL!


    Ссылки на SQL

    На W3Schools вы найдете полный справочник по ключевым словам и функциям:

    Справочник по ключевым словам SQL

    Функции MYSQL

    Функции SQLServer

    Функции доступа MS

    Краткий справочник по SQL


    Типы данных SQL

    Типы данных и диапазоны для Microsoft Access, MySQL и SQL Server.

    Типы данных SQL


    Экзамен SQL — получите свой диплом!

    Интернет-сертификация W3Schools

    Идеальное решение для профессионалов, которым необходимо совмещать работу, семью и карьеру.

    Уже выдано более 25 000 сертификатов!

    Получите сертификат »

    Сертификат HTML документирует ваши знания HTML.

    Сертификат CSS свидетельствует о ваших знаниях в области CSS.

    Сертификат JavaScript документирует ваши знания JavaScript и HTML DOM.

    Сертификат Python документирует ваши знания Python.

    Сертификат jQuery подтверждает ваши знания о jQuery.

    Сертификат SQL документирует ваши знания SQL.

    Сертификат PHP подтверждает ваши знания PHP и MySQL.

    Сертификат XML документирует ваши знания XML, XML DOM и XSLT.

    Сертификат Bootstrap документирует ваши знания о среде Bootstrap.



    .

    Как правильно отформатировать код SQL

    Написание запросов к базе данных требует знания синтаксиса SQL, но это еще не все, что вам следует знать. Передовой опыт написания профессионального кода SQL требует хороших навыков форматирования. В этой статье я расскажу, почему это так важно, и основные правила, которым вы должны следовать.

    Почему стоит форматировать код SQL?

    Начинающие программисты SQL часто не уделяют много внимания форматированию своего кода.Если вы думаете, что форматирование — это то, что можно игнорировать, посмотрите на код ниже:

      ВЫБРАТЬ id, FirstName, LASTNAME, c.nAme FROM людей p покинули города JOIN AS c на c.id = p.cityid;  

    Этот SQL-запрос выше был написан без использования каких-либо правил форматирования. Теперь сравните это с форматированным запросом ниже, который представляет собой тот же код:

      ВЫБЕРИТЕ p.PersonId,
              p.FirstName,
              p.LastName,
              c. Имя
         ОТ ЛИЦА AS p
    LEFT JOIN City AS c
              На стр.CityId = c.CityId;  

    Вы видите разницу? Что более читабельно? Какой запрос легче понять?

    Конечно, очевидно, что первый запрос читать не очень легко. Кроме того, быстро вносить изменения в этот код также является проблемой. Если вы хотите сравнить этот запрос с другим аналогичным запросом, это будет непростая задача. Второй запрос совершенно другой, хотя это точно такой же код — его легко читать, его легко исправить, и его будет просто сравнить с другим хорошо отформатированным кодом.Правильное форматирование кода SQL помогает программистам избежать ошибок.

    Хорошо, теперь вы понимаете, почему форматирование кода SQL может быть хорошей идеей. Теперь пора научиться это делать.

    Как отформатировать код SQL

    Существуют разные подходы к форматированию кода. У некоторых программистов SQL есть индивидуальные стили и предпочтения для форматирования запросов SQL. Они имеют опыт программирования и соблюдают удобные для них правила. Это неплохо, если вы работаете только над своими собственными проектами, но что, если вы работаете вместе с другими коллегами?

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

    Именование объектов

    Во-первых, я обсуждаю общие правила именования объектов базы данных. Это самые распространенные правила:

    • Избегайте использования имени таблицы / столбца во множественном числе. Лучше использовать сотрудников вместо сотрудников
    • Если имя таблицы или столбца должно состоять из более чем одного слова, используйте подчеркивание для их соединения, например employee_city .Некоторые профессионалы предпочитают использовать стиль CamelCase, например EmployeeCity . Предпочтительный стиль отличается для разных систем реляционных баз данных
    • Убедитесь, что имя еще не используется в качестве ключевого слова в SQL
    • Если имя совпадает с ключевым словом SQL, заключите имя в кавычки
    • Имя объекта в базе данных для таблицы или столбца должно быть уникальным и не слишком длинным. Избегайте использования специальных символов в имени, таких как $, &, * и т. Д.(используйте только буквы, цифры и символы подчеркивания)
    • Используйте подчеркивание в имени только в случае необходимости
    • Не начинайте имя с подчеркивания
    • Используйте комментарии только при необходимости
    • Избегайте сокращений, но, если вы их используете, убедитесь, что они будут понятны.
    • Избегайте присвоения одинакового имени как таблице, так и столбцу
    • Используйте те же правила именования для псевдонимов для столбцов или таблиц
    • Включите ключевое слово AS для создания псевдонимов, потому что это делает код более читабельным.
    • Для столбца первичного ключа избегайте имени id .Хорошая идея — объединить id с именем таблицы, например: id_employee

    Выравнивание

    Большинство экспертов рекомендуют сначала писать ключевые слова на новой строке слева, а затем остальную часть кода справа, например:

      ВЫБЕРИТЕ p.PersonId,
           p.FirstName,
           p.LastName,
           c. Имя
      ОТ ЛИЦА AS p
      ПРИСОЕДИНЯЙТЕСЬ City AS c
        НА p.CityId = c.CityId;  

    Отступ

    Свободное использование символов новой строки действительно может улучшить читаемость SQL-запроса.Рекомендуется использовать новую строку для каждого отдельного запроса и использовать новую строку для каждого отдельного столбца после запятой. Точно так же рекомендуется использовать пробелы для окружения оператора равенства, использовать пробелы до или после апострофа и использовать пробел после запятой.

    В разделах ниже представлены более подробные сведения о передовых методах использования отступов в различных типах запросов SQL.

    Комментарий

    Избегайте написания слишком большого количества комментариев в коде. Конечно, есть случаи, когда комментарии необходимы, но обычно лучше использовать многострочные комментарии, которые обозначаются открывающими и закрывающими символами / *.Рекомендуется писать этот тип комментария в начале новой строки, вместо того, чтобы начинать строку с выполняемым кодом. Комментарий должен быть написан над соответствующей строкой кода SQL с таким же отступом. Например:

      ВЫБЕРИТЕ p.PersonId,
           p.FirstName,
           p.LastName,
           / * Столбец Name - это название города: * /
           p.Name,
      ОТ ЛИЦА AS p
     ГДЕ p.Name = 'Нью-Йорк';  

    В коде SQL также можно добавить однострочные комментарии.Этот тип комментария обозначается двойным дефисом ( - ) в начале текста комментария. Весь текст после этих символов рассматривается как комментарий.

      SELECT - мы должны удалить этот столбец p.PersonId,
           p.FirstName,
           p.LastName,
           p.Name
      ОТ человека AS p;  

    SELECT запросы

    В этом типе запроса ВЫБРАТЬ — это первое слово в команде. Если после SELECT много столбцов, лучше разделить их, поместив каждый в отдельную строку.Каждая новая строка должна иметь отступ. Обязательно ставьте запятые в конце строки, а не в начале строки.

      ВЫБЕРИТЕ p.PersonId,
           p.FirstName,
           p.LastName,
           c. Имя
      ОТ человека AS p;  

    Для ключевых слов ОТ , ГДЕ , ЗАКАЗАТЬ ПО , ГРУППА ПО и ИМЕЮЩИЙ , напишите каждое в новой строке без отступа.

      ВЫБЕРИТЕ p.PersonId,
           p.FirstName,
           п.Фамилия,
           p.Name,
      ОТ ЛИЦА AS p
     ГДЕ p.Name = 'Нью-Йорк';  

    Если оператор WHERE имеет более одного условия, разделите каждое условие новой строкой с отступом и используйте новую строку с отступом с условными операторами И или ИЛИ внутри оператора WHERE.

      ВЫБЕРИТЕ p.PersonId,
           p.FirstName,
           p.LastName,
           p.Name
      ОТ ЛИЦА AS p
     ГДЕ p.Name = 'Нью-Йорк'
        ИЛИ p.Name = 'Чикаго';  

    Заявления JOIN

    Если вы соединяете таблицы, используйте новые строки для операторов INNER JOIN , LEFT JOIN и т. Д.Для оператора ON напишите новую строку с отступом внутри оператора JOIN . Однако, если имеется более одного условия, используйте новую строку с отступом перед условным оператором AND или OR .

      ВЫБЕРИТЕ p.PersonId,
           p.FirstName,
           p.LastName,
           c. Имя
      ОТ ЛИЦА AS p
      ПРИСОЕДИНЯЙТЕСЬ City AS c
        НА p.CityId = c.CityId;  

    Длинный и вложенный запрос SQL

    Длинные запросы иногда содержат подзапросы.В этой ситуации подзапрос должен находиться в новой строке с отступом.

    Для структуры CASE поместите каждый WHEN и END на новую строку.

      ВЫБЕРИТЕ p.PersonId,
           p.FirstName,
           p.LastName,
           КЕЙС
             КОГДА p.Age <18 THEN 'младше 18'
             КОГДА p.Age> = 18, ТО '18 or more '
           END AS Возраст
      ОТ человека AS p;  

    Другие типы SQL-запросов

    Существуют аналогичные правила для запросов, которые изменяют, вставляют или удаляют данные.

    Использовать отступ для ЗНАЧЕНИЙ в запросах вставки:

      ВСТАВИТЬ В автомобиль (id_car, имя, год) ЗНАЧЕНИЯ
      (1, «Ауди», 2010 г.);  

    В случае, если вы вставляете больше строк в один запрос, записывайте каждую строку как новую строку с отступом:

      ВСТАВИТЬ В автомобиль (id_car, имя, год) ЗНАЧЕНИЯ
      (1, Audi, 2010),
      (2, «Шкода», 2015);  

    Аналогичным образом в запросе UPDATE используйте SET и WHERE , как в заявлении SELECT , с новой строкой без отступа:

      ОБНОВЛЕНИЕ Автомобиль
    УСТАНОВИТЬ год = 2012
    ГДЕ Имя = 'Audi';  

    или в запросе DELETE :

      УДАЛИТЬ ИЗ МАШИНЫ
    ГДЕ Имя = 'Audi';  

    Как плохое форматирование кода SQL приводит к проблемам

    Один из примеров того, как плохое форматирование приводит к проблемам, можно увидеть в запросе ниже, в котором запятые помещены в начало каждой строки:

      SELECT / * мы должны удалить этот столбец * / p.PersonId
         , p.FirstName
         , p.LastName
         , p.Name
      ОТ ЛИЦА AS p
     ГДЕ p.Name = 'Нью-Йорк';  

    Сначала это может иметь смысл, но если вы закомментируете первый столбец, чтобы удалить его, запрос вернет ошибку.

    Другая ошибка может возникнуть, если вы не используете отступы и новые строки. Например:

      Выберите person.id_person, person.name, person.age, person.description, person.city от person, где person.age> 20 и person.city ​​= (выберите название из города, где id_city> 20)  

    В этом плохо отформатированном коде было бы очень легко по ошибке удалить предложение WHERE в подзапросе, когда вы намеревались удалить предложение WHERE в основном запросе.

    Многие проблемы легко найти, если запрос правильно отформатирован, особенно в длинном запросе с сотнями строк кода.

    Сводка

    Игнорирование стандарта форматирования SQL может вызвать серьезные проблемы при совместной работе с другими программистами.Правильное форматирование упрощает чтение кода SQL и помогает предотвратить ошибки при внесении изменений в код.

    В этой статье я представил некоторые из правил, рекомендованных экспертами, которые могут помочь вам в написании более понятного кода. Написание красивого кода SQL — хорошая рабочая привычка, которую ценят работодатели. Кодекс указывает на ваш уровень профессионализма и показывает, что вы подходите к работе серьезно и современно. Примите вызов и станьте более профессиональным программистом!

    .

    Контрольный список проверки кода SQL Server для разработчиков

    В жизненном цикле разработки программного обеспечения Code Review играет неотъемлемую роль в улучшении качества продукта. Контрольный список проверки кода незаменим, поскольку он обеспечивает соблюдение лучших практик и последовательное выполнение проверок. Разработчикам важно знать правила кодирования при работе над изменениями кода. Выявление ошибки на раннем этапе процесса недорого и легче устраняется, чем по сравнению с ошибкой, обнаруженной позже в игре.Добавление всех распространенных ошибок в контрольный список — отличный способ повысить осведомленность и обеспечить хорошее качество кода в течение определенного периода времени.

    В этой статье мы рассмотрим несколько рекомендаций по проверке кода SQL Server, которые вы можете использовать в своей повседневной работе по разработке баз данных. Контрольный список проверки кода иногда может быть довольно сложным, поэтому я попытался упомянуть 10 важных рекомендаций, которых вы можете придерживаться.

    Убедитесь, что вы выбрали наиболее эффективный тип данных

    Важно, чтобы вы выбрали лучший тип данных для хранения ваших данных, который соответствует вашим бизнес-требованиям.Неправильный выбор типа данных приводит к плохому дизайну базы данных и потенциально может привести к проблемам с производительностью. SQL Server предоставляет широкий спектр типов данных, из которых вы можете выбирать. Вы должны убедиться, что вы выделяете правильный объем дискового пространства для ваших данных. Помните, что чем больший тип данных вы используете, тем больше места для хранения требуется.

    Один отличный совет при выборе типов данных — помнить о фиксированном типе данных (CHAR) и динамическом (VARCHAR). Позвольте мне объяснить это на простом примере —

    CHAR (20) использует для хранения 20 символов, независимо от того, что вам действительно нужно сохранить значение менее 20 символов.

    VARCHAR (20) гибок и использует только необходимое хранилище. Следовательно, если у вас есть строки разного размера, рекомендуется использовать переменный тип данных, что позволяет сэкономить много места для хранения.

    Проявление должной осмотрительности при выборе типов данных может избавить вас от множества доработок и снижения производительности на более поздних этапах разработки вашего приложения. Я настоятельно рекомендую вам внимательно изучить типы данных для ваших объектов базы данных.

    Проверить, что рабочий набор данных минимальный по размеру

    Глядя на ваши бизнес-требования, всегда старайтесь выяснить, какие данные вы хотите получить из базы данных. Нет необходимости извлекать дополнительную информацию из базы данных и передавать ее клиентскому приложению, которое не будет использоваться. Это не только увеличивает накладные расходы и потери ресурсов, но и значительно снижает скорость.

    Всегда старайтесь избегать операции SELECT * и по возможности используйте явный список столбцов.

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

    Глядя на два нижеприведенных запроса SQL, рекомендуется использовать запрос 2 вместо запроса 1 —

    ВЫБЕРИТЕ *

    ИЗ [AdventureWorks2008].[HumanResources]. [Сотрудник]

    SELECT LoginID, JobTitle

    FROM [AdventureWorks2008]. [HumanResources]. [Сотрудник]

    WHERE OrganizationLevel = 2

    Убедитесь, что соглашения об именах ясны и понятны

    Чтобы создать поддерживаемое приложение, вам нужно, чтобы ваш код рассказывал свою собственную историю. Этого легко добиться, дав понятные и значимые имена вашим переменным, таблицам, представлениям, функциям, хранимым процедурам и другим объектам базы данных.Это помогает сделать код понятным и сводит к минимуму необходимость явного комментирования.

    С точки зрения удобочитаемости и обслуживания приложения без комментариев не обойтись. Когда вы работаете со сложной бизнес-функцией, всегда полезно добавлять краткие комментарии. Это поможет другому разработчику понять, почему было внесено изменение. Но постарайтесь не слишком комментировать — пусть код рассказывает свою историю. Если вы проводите модульное тестирование хранимых процедур, пусть за вас выступят модульные тесты.Модульные тесты, в отличие от комментариев, никогда не могут быть устаревшими — они дадут вам немедленную обратную связь, когда функциональность сломается / изменится.

    Я настоятельно рекомендую проверять комментарии и соглашения об именах в процессе обзора. Бизнес-требования часто меняются, как и код. Следовательно, важно, чтобы связанные комментарии также обновлялись — потому что, если комментарии и код не синхронизированы друг с другом, это может вызвать путаницу и увеличить ваш технический долг в течение определенного периода времени.

    Проверьте безопасность данных SQL Server

    Безопасность данных — важная проблема, и мы всегда должны обеспечивать защиту наших данных. Как правило, мы храним конфиденциальную информацию, такую ​​как личный номер телефона, адрес электронной почты, данные банковского счета и данные кредитной карты, в наших таблицах базы данных. С точки зрения безопасности, нам необходимо убедиться, что информация, позволяющая установить личность (PII), защищена от несанкционированного доступа с помощью шифрования или реализации настраиваемой логики маскирования.

    Изучая код SQL, попробуйте проверить возможные сценарии, которые подвержены атаке SQL Injection
    — проблема уязвимости системы безопасности, при которой вредоносный код вставляется в строки и передается экземпляру SQL-сервера для выполнения.

    Если вы динамически строите свои SQL-запросы путем объединения строк и не используете параметризованные запросы или хранимые процедуры, вы подвержены атаке с использованием SQL-инъекции. Поэтому я предлагаю вам просмотреть свои специальные запросы SQL и оценить, можно ли их преобразовать в хранимую процедуру.

    Убедитесь, что ваше приложение имеет хорошее управление ресурсами

    Многие клиентские приложения используют ADO.NET для подключения к базе данных, выполнения команд и получения данных. Используя поставщик данных для SQL Server, вы сможете открывать и закрывать соединения, извлекать данные и обновлять их. Два важных раздела поставщика данных:

    • SQLConnection объект — используется для установления соединения с базой данных SQL Server
    • SQLCommand объект — используется для подготовки хранимой процедуры или специального оператора SQL, который вы хотите выполнить в базе данных

    Как только вы закончите выполнение команд и получение данных, вам необходимо освободить все связанные объекты.В C # вы можете использовать блок USING для своевременного закрытия / освобождения вашего соединения и командных объектов. Я бы рекомендовал проверить это во время процесса проверки, чтобы вы могли запретить любые утечки памяти и проблемы с производительностью в вашем приложении.

    То же самое относится к объектам вашей базы данных. Всегда рекомендуется очищать ресурсы — отбрасывать временные таблицы, закрывать и освобождать курсоры, что гарантирует освобождение текущих данных и связанных блокировок.

    Используйте хранимые процедуры поверх специального SQL для повышения производительности и удобства обслуживания

    Использование хранимых процедур в вашей работе по разработке баз данных дает множество преимуществ. Хранимые процедуры помогают кэшировать планы выполнения и повторно использовать их. Даже специальные запросы могут повторно использовать план выполнения, но небольшое изменение значений параметров заставит оптимизатор сгенерировать новый план выполнения.

    Кроме того, использование хранимых процедур снизит сетевой трафик и задержку, тем самым улучшив производительность приложений.По сети от клиентского приложения к серверу базы данных передается что-то вроде —
    EXEC [dbo]. [Sp_Get_Next_Order_Number]

    Теперь сравните это с передачей полного специального запроса по сети и дополнительными накладными расходами, которые он создаст!

    С хранимой процедурой обслуживание упрощается, поскольку у вас есть единое место для изменения кода в случае изменения требований. Хранимая процедура инкапсулирует логику, поэтому код можно централизованно изменять и повторно использовать, не затрагивая различных клиентов, использующих его.Это будет невозможно, если в вашем приложении есть специальные запросы.

    Помните об устаревших функциях и убедитесь, что не используете их ни в одном из ваших новых кодов

    В каждом выпуске версии SQL Server Microsoft объявляет об « обратной совместимости » с предыдущими версиями. Обычно это делится на 4 основные категории — устаревшие, прекращенные, критические и изменения поведения. Если функция указана как устаревшая, это означает, что Microsoft заявляет о своем неодобрении использования этой функции в любых будущих разработках.

    Вы можете просмотреть все устаревшие функции в SQL Server 2016 здесь. Эти функции планируется удалить в будущей версии SQL Server, и поэтому в процессе проверки убедитесь, что вы не используете их при разработке новых приложений.

    Одной из таких устаревших функций, которую все еще используют многие устаревшие приложения, являются типы данных NTEXT , TEXT и IMAGE . Вам следует избегать использования этих типов данных в новых разработках, а также планировать изменение приложений, которые в настоящее время их используют.Вместо этого вы можете использовать NVARCHAR (), VARCHAR () и VARBINARY () .

    Другой устаревший синтаксис — это использование синтаксиса соединения старого стиля:

    выберите a.id, подстроку (b.name, 1,40) как «имя таблицы», count (colid) как «count»

    из syscolumns a, sysobjects b

    , где a.id = b. id

    группа по a.id, имя b

    Использование явного синтаксиса JOIN рекомендуется во всех случаях —

    выберите a.id, подстрока (b.name, 1,40) как ‘имя таблицы’, count (colid) как ‘count’

    из syscolumns a

    внутренних объектов соединения b

    на a.id = b.id

    группа по a.id, b.name

    Реализовать структурированную обработку ошибок для обнаружения ошибок времени выполнения

    Обработка ошибок в вашем коде SQL имеет решающее значение. Иногда вам может потребоваться сообщить вызывающему приложению, если есть проблема, а в других случаях вам может потребоваться обработать ошибку на вашей стороне, а не возвращать ошибку в клиентское приложение.В первом сценарии вы можете использовать инструкцию THROW с номером ошибки. Тогда как во втором сценарии вы можете использовать конструкцию TRY..CATCH.

    Я бы предложил использовать конструкцию TRY… CATCH в вашем коде, чтобы приложение не выдавало ошибку времени выполнения. Это так же просто, как поместить весь ваш SQL-код в блок TRY — и затем, когда возникает ошибка, управление автоматически передается блоку CATCH, где вы имеете право решать, как обрабатывать ошибку.Здесь стоит упомянуть еще один момент: внутри блока CATCH у вас будет доступ к дополнительным функциям ошибок, таким как ERROR_NUMBER, ERROR_LINE, ERROR_MESSAGE, ERROR_SEVERITY, ERROR_PROCEDURE и ERROR_STATE .

    Найдите ниже простую демонстрацию —

    НАЧАТЬ ПОПРОБОВАТЬ

    ВЫБРАТЬ 9/0; — Разделить на ноль

    END TRY

    BEGIN CATCH

    SELECT ERROR_LINE () AS ‘Line’,

    ERROR_MESSAGE () AS ‘Message’,

    ERROR_NUMBER () AS ‘Number’,

    ITY ERROR_ «Серьезность»,

    ERROR_STATE () AS «Состояние»;

    КОНЦЕВОЙ ЗАЖИМ;

    Проверьте свою стратегию индексирования, чтобы обеспечить высокую производительность

    По мере реализации новых бизнес-требований и написания большего количества кода TSQL совершенно необходимо создавать новые индексы.

    Индексирование, как правило, является самым простым способом повысить производительность ваших запросов SQL Server. Однако, если его неправильно спроектировать, это также может отрицательно сказаться на производительности вашего приложения. Например, если у вас есть OLTP-система, вам следует внимательно просмотреть все вновь созданные индексы, чтобы определить, действительно ли они нужны. Также важно ограничение количества индексов, иначе это замедлит операции манипулирования данными, такие как INSERT / DELETE / UPDATE. Не забывайте о дополнительном дисковом пространстве, которое занимают индексы.

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

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

    Оптимизация производительности — это функция, которую необходимо постоянно отслеживать и проверять.

    Последнее, что составляет суть проверки кода, — это Performance Optimization . Вы должны смотреть на написанные SQL-запросы и хранимые процедуры, а также на время, необходимое для их выполнения. Имейте в виду, что ваши данные будут расти с течением времени, поэтому быстрый выполнение запроса в настоящее время не означает, что он оптимален.

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

    Глядя на фрагмент плана выполнения выше, мы легко можем увидеть, что оператор Parallelism потребляет наибольшие затраты. Как видите, вклад каждого оператора в общую стоимость запроса отображается в виде процентного значения. Также ширина стрелки между операторами указывает количество строк, на которые воздействует оператор. Как правило, для повышения производительности запроса вы можете добавить в запрос условие фильтрации, чтобы уменьшить количество строк.После этого это отразится в плане выполнения с уменьшенной шириной стрелки.

    Заключение

    Подводя итог, можно сказать, что наличие процесса проверки кода дает множество преимуществ, таких как согласованный дизайн приложения, выявление проблем на ранних этапах процесса, осведомленность членов команды о передовых методах работы и улучшение общего качества кода. Если у вас нет контрольного списка проверки кода, вы можете использовать его в качестве базового документа и добавлять к нему в зависимости от конкретной среды.Если у вас уже есть контрольный список для проверки кода, дайте мне знать в комментариях ниже некоторые другие рекомендации, которым вы следуете.


    Старший разработчик в EBSCO Industries

    Самир Бехара (Samir Behara) является архитектором решений в EBSCO Industries и создает программные решения с использованием передовых технологий. Он является MVP платформы данных Microsoft с более чем 13-летним опытом работы в ИТ над крупномасштабными корпоративными приложениями, включающими сложные бизнес-функции, веб-интеграцию и управление данными в различных областях, таких как страхование, производство и публикация.

    Самир часто выступает на конференциях, таких как PASS Summit, IT / Dec Connections, CodeStock, SQL Saturday и CodeCamps. Он является одним из руководителей группы пользователей SQL Server Steel City, Бирмингем, Алабама. Он является автором www.dotnetvibes.com

    Посмотреть все сообщения Samir Behara

    Последние сообщения Samir Behara (посмотреть все) .

    Реорганизация кода SQL непосредственно в SSMS и Visual Studio

    Переименовать псевдонимы

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

    Переименовать объекты и переменные

    Эта функция позволяет улучшить читаемость кода, давая содержательные и самоочевидные имена для таблиц, столбцов, временных таблиц и столбцов, представления, хранимые процедуры и функции. SQL Complete автоматически исправит все ссылки на переименованные объекты.

    С помощью функции переименования вы также можете изменить имена локальных и SQLCMD переменных за несколько секунд. Предварительный просмотр изменений кода в удобном древовидном представлении диалогового окна «Переименовать».

    Вставка точки с запятой

    Когда вы вводите код, не пытайтесь правильно ставить точки с запятой после каждого конкретного оператора.Опция Insert Semicolons сделает это за вас — он вставляет пропущенные точки с запятой после каждого оператора в запросе одним щелчком мыши.

    Заключение необходимых идентификаторов в квадратные скобки

    По мере разработки кода эта функция автоматически добавляет квадратные скобки вокруг идентификаторов там, где это необходимо.

    Отладчик T-SQL

    T-SQL Debugger позволяет исследовать поведение объектов базы данных во время выполнения и находить логические ошибки. Можно также воспользоваться поддержкой пошагового выполнения, просмотра стека вызовов, точек останова и отслеживания.

    Найти недействительные объекты

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

    • Поиск и обнаружение недействительных объектов в нескольких базах данных
    • Анализ и составление отчета о найденных результатах
    • Управление объектами с помощью кнопок «Сценарий как ALTER» и «Сценарий как DROP»
    • Простая навигация по сетке поиска недопустимых объектов

    .

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *