Выполнение SQL-запросов в Management Studio

Среда SQL Server Management Studio предоставляет завершенное средство для создания всех типов запросов. С ее помощью можно создавать, сохранять, загружать и редактировать запросы. Кроме этого, над запросами можно работать без подключения к какому-либо серверу. Этот инструмент также предоставляет возможность разрабатывать запросы для разных проектов.
Предоставляется возможность работать с запросами как посредством редактора запросов, так и с помощью обозревателя решений. В этой статье рассматриваются оба эти инструмента. Кроме этих двух компонентов среды SQL Server Management Studio мы рассмотрим отладку SQL-кода, используя встроенный отладчик.
Редактор запросов
Чтобы открыть панель редактора запросов Query Editor (Редактор запросов), на панели инструментов среды SQL Server Management Studio нажмите кнопку New Query (Создать запрос). Эту панель можно расширить, чтобы отображать кнопки создания всех возможных запросов, а не только запросов компонента Database Engine. По умолчанию создается новый запрос компонента Database Engine, но, нажав соответствующую кнопку на панели инструментов, можно также создавать запросы MDX, XMLA и др.
Строка состояния внизу панели редактора запросов указывает статус подключения редактора к серверу. Если подключение к серверу не выполнено автоматически, при запуске редактора запросов выводится диалоговое окно подключения к серверу, в котором можно выбрать сервер для подключения и режим проверки подлинности.
Редактирование запросов в автономном режиме предоставляет больше гибкости, чем при подключении к серверу. Для редактирования запросов не обязательно подключаться к серверу, и окно редактора запросов можно отключить от одного сервера (выполнив команду меню Query —> Connection —> Disconnect) и подключить к другому, не открывая другого окна редактора. Чтобы выбрать автономный режим редактирования, в диалоговом окне подключения к серверу, открывающемуся при запуске редактора конкретного вида запросов, просто нажмите кнопку Cancel (Отмена).
Редактор запросов можно использовать для выполнения следующих задач:
создания и выполнения инструкций языка Transact-SQL;
сохранения созданных инструкций языка Transact-SQL в файл;
создания и анализирования планов выполнения общих запросов;
графического иллюстрирования плана выполнения выбранного запроса.
Редактор запросов содержит встроенный текстовый редактор и панель инструментов с набором кнопок для разных действий. Главное окно редактора запросов разделено по горизонтали на панель запросов (вверху) и панель результатов (внизу). Инструкции Transact-SQL (т.е. запросы) для исполнения вводятся в верхнюю панель, а результаты обработки системой этих запросов отображаются в нижней панели. На рисунке ниже показан пример ввода запроса в редактор запросов и результатов выполнения этого запроса:

В первой инструкции запроса USE указывается использовать базу данных SampleDb в качестве текущей базы данных. Вторая инструкция — SELECT — извлекает все строки таблицы Employee. Чтобы выполнить этот запрос и вывести результаты, в панели инструментов редактора запросов нажмите кнопку Execute (Выполнить) или клавишу F5 .
Можно открыть несколько окон редактора запросов, т.е. выполнить несколько подключений к одному или нескольким экземплярам компонента Database Engine. Новое подключение создается нажатием кнопки New Query в панели инструментов среды SQL Server Management Studio.
В строке состояния внизу окна редактора запросов отображается следующая информация, связанная с выполнением инструкций запроса:
состояние текущей операции (например, «Запрос успешно выполнен»);
имя сервера базы данных;
имя текущего пользователя и идентификатор серверного процесса;
имя текущей базы данных;
время, затраченное на выполнение последнего запроса;
количество найденных строк.
Одним из основных достоинств среды SQL Server Management Studio является легкость ее использования, что также относится и к редактору запросов Query Editor. Редактор запросов поддерживает множество возможностей, облегчающих задачу кодирования инструкций языка Transact-SQL. В частности, в нем используется подсветка синтаксиса, чтобы улучшить читаемость инструкций языка Transact-SQL. Все зарезервированные слова отображаются синим цветом, переменные — черным, строки — красным, а комментарии — зеленым.
Кроме этого, редактор запросов оснащен контекстно-зависимой справкой, называющейся Dynamic Help, посредством которой можно получить сведения о конкретной инструкции. Если вы не знаете синтаксиса инструкции, выделите ее в редакторе, а потом нажмите клавишу F1 . Также можно выделить параметры различных инструкций Transact-SQL, чтобы получить справку по ним из электронной документации.
В SQL Management Studio поддерживается инструмент SQL Intellisense, который является видом средства автозавершения. Иными словами, этот модуль предлагает наиболее вероятное завершение частично введенных элементов инструкций Transact-SQL.
С редактированием запросов может также помочь обозреватель объектов (object Explorer). Например, если вы хотите узнать, как создать инструкцию CREATE TABLE для таблицы Employee, щелкните правой кнопкой эту таблицу в обозревателе объектов и в появившемся контекстном меню выберите пункты Script Table As —> CREATE to —> New Query Editor Window (Создать скрипт для таблицы —> Используя CREATE —> Новое окно редактора запросов). Окно редактора запросов, содержащее созданную таким образом инструкцию CREATE TABLE, показано на рисунке ниже. Эта возможность также применима и с другими объектами, такими как хранимые процедуры и функции.

Обозреватель объектов очень полезен для графического отображения плана исполнения конкретного запроса. Планом выполнения запроса называется вариант выполнения, выбранный оптимизатором запроса среди нескольких возможных вариантов выполнения конкретного запроса. Введите в верхнюю панель редактора требуемый запрос, выберите последовательность команд из меню Query —> Display Estimated Execution Plan (Запрос —> Показать предполагаемый план выполнения) и в нижней панели окна редактора будет показан план выполнения данного запроса.
Обозреватель решений
Редактирование запросов в среде SQL Server Management Studio основано на методе решений (solutions). Если создать пустой запрос с помощью кнопки New Query, то он будет основан на пустом решении. Это можно увидеть, выполнив последовательность команд из меню View —> Solution Explorer сразу же после открытия пустого запроса.
Решение может быть связано ни с одним, с одним или с несколькими проектами. Пустое решение, не связано ни с каким проектом. Чтобы связать проект с решением, закройте пустое решение, обозреватель решений и редактор запросов и создайте новый проект, выполнив последовательность команд из меню File —> New —> Project. В открывшемся окне New Project выберите в средней панели опцию SQL Server Scripts. Проект — это способ организации файлов в определенном месте. Проекту можно присвоить имя и выбрать место для его расположения на диске. При создании нового проекта автоматически запускается новое решение. Проект можно добавить к существующему решению с помощью обозревателя решений.
Для каждого созданного проекта в обозревателе решений отображаются папки Connections (Соединения), Queries (Запросы) и Miscellaneous (Разное). Чтобы открыть новое окно редактора запросов для данного проекта, щелкните правой кнопкой его папку Queries и в контекстном меню выберите пункт New Query.
Отладка SQL Server
SQL Server, начиная с версии SQL Server 2008, оснащен встроенным отладчиком кода. Чтобы начать сеанс отладки, выберите в главном меню среды SQL Server Management Studio следующую последовательность команды Debug —> Start Debugging (Отладка —> Начать отладку). Мы рассмотрим работу отладчика на примере с использованием пакета команд. Пакетом называется последовательность инструкций SQL и процедурных расширений, составляющих логическое целое, отправляемая компоненту Database Engine для выполнения всех содержащихся в ней инструкций.
На рисунке ниже показан пакет, который подсчитывает количество сотрудников, работающих над проектом p1. Если это количество равно 4 или больше, то выводится соответствующее сообщение. В противном случае выводятся имена и фамилии сотрудников.

Чтобы остановить выполнение пакета на определенной инструкции, можно установить точки останова, как это показано на рисунке. Для этого нужно щелкнуть слева от строки, на которой нужно остановиться. В начале отладки выполнение останавливается на первой линии кода, которая отмечается желтой стрелкой. Чтобы продолжить выполнение и отладку, выполните команду меню Debug —> Continue (Отладка —> Продолжить). Выполнение инструкций пакета продолжится до первой точки останова, и желтая стрелка остановится на этой точке.
Информация, связанная с процессом отладки, отображается в двух панелях внизу окна редактора запросов. Информация о разных типах информации об отладке сгруппирована в этих панелях на нескольких вкладках. Левая панель содержит вкладку Autos (Автоматические), Locals (Локальные) и до пяти вкладок Watch (Видимые). Правая панель содержит вкладки Call Stack (Стек вызовов), Threads (Потоки), Breakpoints (Точки останова), Command Window (Окно команд), Immediate Window (Окно интерпретации) и Output (Вывод). На вкладке Locals отображаются значения переменных, на вкладке Call Stack — значения стека вызовов, а на вкладки Breakpoints — информация о точках останова.
Чтобы завершить процесс отладки, выполните последовательность команд из главного меню Debug —> Stop Debugging или нажмите синюю кнопку на панели инструментов отладчика.
В SQL Server 2012 функциональность встроенного в SQL Server Management Studio отладчика расширена несколькими новыми возможностями. Теперь в нем можно выполнять ряд следующих операций:
Указывать условие точки останова. Условие точки останова — это SQL-выражение, вычисленное значение которого определяет, будет ли выполнение кода остановлено в данной точке или нет. Чтобы указать условие точки останова, щелкните правой кнопкой красный значок требуемой точки и в контекстном меню выберите пункт Condition (Условие). Откроется диалоговое окно Breakpoint Condition (Условие для точки останова), в котором нужно ввести необходимое логическое выражение. Кроме этого, если нужно остановить выполнение, в случае если выражение верно, то следует установить переключатель Is True. Если же выполнение нужно остановить, если выражение изменилось, то нужно установить переключатель When Changed (Изменилось).
Указать число попаданий в точку останова. Число попаданий — это условие останова выполнения в данной точке в зависимости от количества раз, когда была достигнута эта точка останова в процессе выполнения. При достижении указанного числа прохождений и любого другого условия, указанного для данной точки останова, отладчик выполняет указанное действие. Условие прерывания выполнения на основе числа попаданий может быть одним из следующих:
безусловное (действие по умолчанию) (Break always);
если число попаданий равно указанному значению (Break when the his count equals a specified value);
если число попаданий кратно указанному значению (Break when the hit count equals a multiple of a specified value);
если число попаданий равно или больше указанного значения (Break when the his count is greater or equal to a specified value).
Чтобы задать число попаданий в процессе отладки, щелкните правой кнопкой значок требуемой точки останова на вкладке Breakpoints, в контекстном меню выберите пункт Hit Count (Число попаданий), затем в открывшемся диалоговом окне Breakpoint Hit Count (Число попаданий в точку останова) выберите одно из условий из приведенного ранее списка. Для опций, требующих значение, введите его в текстовое поле справа от раскрывающегося списка условий. Чтобы сохранить указанные условия, нажмите кнопку OK.
Указывать фильтр точки останова. Фильтр точки останова ограничивает работу останова только на указанных компьютерах, процессах или потоках. Чтобы установить фильтр точки останова, щелкните правой кнопкой требуемую точку и в контекстном меню выберите пункт Filter. Затем в открывшемся диалоговом окне Breakpoint Filters (Фильтр точки останова) укажите ресурсы, которыми нужно ограничить выполнение данной точки останова. Чтобы сохранить указанные условия, нажмите кнопку ОК.
Указывать действие в точке останова. Условие When Hit (При попадании) указывает действие, которое нужно выполнить, когда выполнение пакета попадает в данную точку останова. По умолчанию, когда удовлетворяются как условие количества попаданий, так и условие останова, тогда выполнение прерывается. Альтернативно можно вывести заранее указанное сообщение.
Чтобы указать действие при попадании в точку останова, щелкните правой кнопкой красный значок требуемой точки и выберите в контекстном меню пункт When Hit. В открывшемся диалоговом окне When Breakpoint is Hit (При попадании в точку останова) выберите требуемое действие. Чтобы сохранить указанные условия, нажмите кнопку OK.
Использовать окно быстрой проверки Quick Watch. В окне QuickWatch (Быстрая проверка) можно просмотреть значение выражения Transact-SQL, а потом сохранить это выражение в окне просмотра значений Watch (Просмотр значений). Чтобы открыть окно Quick Watch, в меню Debug выберите пункт Quick Watch. Выражение в этом окне можно или выбрать из раскрывающегося списка Expression (Выражение), или ввести его в это поле.
Использовать всплывающую подсказку Quick Info. При наведении указателя мыши на идентификатор кода средство Quick Info (Краткие сведения) отображает его объявление во всплывающем окне.
Служебная программа sqlcmd
Для SQL Server 2014 и более ранней версии см. служебную программу Sqlcmd.
Сведения об использовании программы sqlcmd в Linux см. в статье Установка программ командной строки SQL Server sqlcmd и bcp в Linux.
Служебная программа sqlcmd позволяет выполнять инструкции Transact-SQL, системные процедуры и файлы скриптов в различных доступных режимах:
- В командной строке.
- В режиме SQLCMD в редакторе запросов.
- В файле скрипта Windows.
- В шаге задания операционной системы (cmd.exe), выполняемого в агенте SQL Server.
Эта программа использует ODBC для выполнения пакетов Transact-SQL.
Скачивание и установка sqlcmd
Windows
Средства командной строки являются общедоступными, однако они выпускаются вместе с пакетом установщика для SQL Server 2019 (15.x).
Сведения о версии
- Номер выпуска: 15.0.4298.1
- Номер сборки: 15.0.4298.1
- Дата выпуска: 7 апреля 2023 г.
Новая версия SQLCMD поддерживает проверку подлинности Azure AD, в том числе многофакторную проверку подлинности (MFA) для базы данных SQL, Azure Synapse Analytics и функции Always Encrypted. Новая версия программы BCP поддерживает проверку подлинности Azure AD, в том числе многофакторную проверку подлинности (MFA) для базы данных SQL и Azure Synapse Analytics.
Требования к системе windows 11, Windows 10, Windows 7, Windows 8, Windows 8.1, Windows Server 2008–2022.
Linux/macOS
Инструкции по установке sqlcmd в Linux и macOS см. в статье Установка sqlcmd и bcp в Linux.
Проверка версии
Чтобы проверка версию SQLCMD, выполните sqlcmd -? команду и убедитесь, что используется версия 15.0.4298.1 или более поздняя.
Для поддержки Always Encrypted ( -g ) и проверки подлинности Azure Active Directory ( -G ) требуется версия не ниже 13.1. На компьютер можно установить несколько версий sqlcmd.exe. Убедитесь, что используется правильная версия. Чтобы определить версию, выполните sqlcmd -? .
Предустанавливается
Azure Cloud Shell
Программу sqlcmd можно запустить из Azure Cloud Shell, так как она предварительно установлена по умолчанию: Запуск Cloud Shell
Azure Data Studio
Чтобы выполнить инструкции sqlcmd в Azure Data Studio, выберите «Включить SQLCMD» на панели инструментов редактора.
SQL Server Management Studio (SSMS)
Чтобы выполнить инструкции sqlcmd в SSMS, выберите «Режим SQLCMD» в раскрывающемся списке «Запрос» на верхней панели навигации.
SQL Server Management Studio (SSMS) использует Microsoft .NET Framework SqlClient для выполнения в обычном режиме и в режиме SQLCMD в редакторе запросов. Когда sqlcmd вызывается из командной строки, sqlcmd использует драйвер ODBC. Так как могут применяться разные параметры по умолчанию, выполнение одного и того же запроса в среде SQL Server Management Studio в режиме SQLCMD и в программе sqlcmd может различаться.
Синтаксис
Сейчас sqlcmd не требует вводить пробел между параметром командной строки и значением. Однако такой формат может появиться в будущих выпусках.
Более подробные сведения о синтаксисе и использовании sqlcmd см. в следующих статьях:
Параметры командной строки
Параметры, связанные с именем для входа
-A
Входит в SQL Server через выделенное административное соединение. Этот вид соединения предназначен для устранения неполадок на сервере. Это подключение работает только с серверными компьютерами, поддерживающими выделенное административное подключение (DAC). Если приложение уровня данных недоступно, программа sqlcmd создает сообщение об ошибке, а затем завершает работу. Дополнительные сведения о DAC см. в статье Диагностическое соединение для администраторов баз данных. Параметр -A не поддерживается вместе с параметром -G. При подключении к базе данных SQL с использованием параметра -A необходимо быть администратором SQL Server. DAC недоступно для администратора Azure Active Directory.
-C
С помощью этого переключателя клиент настраивает неявное доверие к сертификату сервера без проверки. Этот параметр аналогичен параметру ADO.NET TRUSTSERVERCERTIFICATE = true .
-dимя_базы данных
Выдает инструкцию USE db_name при запуске программы sqlcmd. Этот параметр задает переменную скрипта SQLCMDDBNAME программы sqlcmd . Этот параметр задает начальную базу данных. По умолчанию свойство default-database имени входа. Если база данных не существует, создается сообщение об ошибке, и программа sqlcmd завершает работу.
-D
Интерпретирует имя сервера, предоставленное для -S, как имя DSN, а не имя узла. Дополнительные сведения см. в разделе Поддержка имени DSN в sqlcmd и bcp статьи Соединение с помощью sqlcmd.
Параметр -D доступен только для клиентов Linux и MacOS. В клиентах Windows он объявлен устаревшим, был удален и игнорируется.
-llogin_timeout
Задает время ожидания (в секундах) при подключении программы sqlcmd через драйвер ODBC при попытке соединения с сервером. Этот параметр задает переменную скрипта SQLCMDLOGINTIMEOUT программы sqlcmd . По умолчанию время ожидания входа для программы sqlcmd составляет 8 секунд. При использовании параметра — G для подключения к базе данных SQL или Azure Synapse Analytics и проверке подлинности с помощью Azure Active Directory рекомендуется задавать время ожидания не меньше 30 секунд. Время ожидания входа должно быть числом в диапазоне от 0 до 65 534. Если указанное значение не является числовым или не попадает в этот диапазон, программа sqlcmd создает сообщение об ошибке. Значение 0 задает неограниченное время ожидания.
-E
Для входа в SQL Server вместо имени пользователя и пароля использует доверительное соединение. По умолчанию, если параметр -E не указан, программа sqlcmd использует доверительное соединение.
Параметр -E не использует имя пользователя и пароль, указанные в переменных среды, например SQLCMDPASSWORD. Если параметр -E используется в сочетании с параметром -U или -P , выдается сообщение об ошибке.
-g
Задает значение Enabled для параметра «Шифрование столбцов». Дополнительные сведения см. в разделе Постоянное шифрование. Поддерживаются только главные ключи, хранящиеся в хранилище сертификатов Windows. Для использования параметра -g требуется версия sqlcmd не ниже 13.1. Чтобы определить версию, выполните sqlcmd -? .
-G
Клиент использует этот переключатель при подключении к базе данных SQL или Azure Synapse Analytics, чтобы указать, что проверка подлинности пользователя выполняется с помощью Azure Active Directory. Этот параметр задает переменную скрипта SQLCMDUSEAAD = true программы sqlcmd . Для использования параметра -G требуется версия sqlcmd не ниже 13.1. Чтобы определить версию, выполните sqlcmd -? . Дополнительные сведения см. в статье Подключение к базе данных SQL или Azure Synapse Analytics с использованием проверки подлинности Azure Active Directory. Параметр -A не поддерживается вместе с параметром -G.
Параметр -G применяется только для Базы данных SQL Azure и Azure Synapse Analytics. Azure AD интерактивная проверка подлинности в настоящее время не поддерживается в Linux или macOS. Azure AD для встроенной проверки подлинности требуется Microsoft ODBC Driver 17 для SQL Server версии 17.6.1 или более поздней и правильно настроенная среда Kerberos.
Имя пользователя и пароль Azure Active Directory
Если вы хотите использовать имя пользователя и пароль Azure Active Directory, можно указать параметр -G , а также использовать имя пользователя и пароль, задав параметры -U и -P .
Параметр -G создает следующую строку подключения в серверной части:
Встроенная проверка подлинности Azure Active Directory
Чтобы использовать встроенную проверку подлинности Azure Active Directory, укажите параметр -G без имени пользователя или пароля. Для встроенной проверки подлинности AAD требуется драйвер Microsoft ODBC 17 for SQL Server версии 17.6.1 или более поздней, а также правильно настроенная среда Kerberos .
При этом в серверной части создается следующая строка подключения:
Параметр -E (Trusted_Connection) нельзя использовать вместе с параметром -G .
Интерактивная проверка подлинности Azure Active Directory
Интерактивная проверка подлинности Azure AD для Базы данных SQL Azure и Azure Synapse Analytics позволяет использовать интерактивный метод, поддерживающий многофакторную проверку подлинности. Дополнительные сведения см. в разделе Интерактивная проверка подлинности Active Directory.
Для интерактивного режима Azure AD требуется программа sqlcmdверсии 15.0.1000.34 или более поздней, а также ODBC версии 17.2 или более поздней.
Чтобы включить интерактивную проверку подлинности, укажите аргумент -G только с именем пользователя (-U) без пароля.
В следующем примере данные экспортируются с помощью Azure AD интерактивного режима, указывающего имя пользователя, где пользователь представляет учетную запись Azure AD. Это тот же пример, который использовался в предыдущем разделе: Имя пользователя и пароль Azure Active Directory.
Для интерактивного режима требуется вводить пароль вручную. Для учетных записей с включенной многофакторной проверкой подлинности следует выполнить настроенный метод аутентификации MFA.
Предыдущая команда создает следующую строку подключения в серверной части:
Если пользователь Azure AD является федеративным пользователем домена с учетной записью Windows, имя пользователя, необходимое в командной строке, содержит учетную запись домена (например, [email protected]; см. ниже):
Если гостевые пользователи есть в определенной службе Azure AD и являются частью группы, которая существует в базе данных SQL, имеющей разрешения на выполнение команды sqlcmd, используется псевдоним гостевого пользователя (например, [email protected] ).
Существует известная неполадка при использовании параметра -G и -U с программой SQLCMD, при которой размещение параметра -U перед параметром -G может привести к сбою проверки подлинности. Всегда начинайте с использования параметра -G , за которым следует параметр -U .
-Hимя_рабочей_станции
Имя рабочей станции. Этот параметр задает переменную скрипта SQLCMDWORKSTATION программы sqlcmd . Имя рабочей станции указано в столбце sys.sysprocesses hostname представления каталога и может быть возвращено с помощью хранимой процедуры sp_who . Если этот параметр не указан, по умолчанию используется текущее имя компьютера. Это имя может использоваться для идентификации других
сеансов sqlcmd.
-j выводит на экран необработанные сообщения об ошибках.
-Kapplication_intent
Объявляет тип рабочей нагрузки приложения при соединении с сервером. Единственным поддерживаемым в данное время значением является ReadOnly. Если параметр -K не указан, служебная программа sqlcmd не будет поддерживать подключение к вторичному реплика в Always On группе доступности. Дополнительные сведения см. в статье Активные вторичные реплики: доступ только для чтения к вторичным репликам (группы доступности AlwaysOn)
-Mотработка_отказа_в_сети_с_подсетями
Всегда указывайте параметр -M при соединении с прослушивателем группы доступности SQL Server или экземпляром отказоустойчивого кластера SQL Server. -M обеспечивает более быстрое обнаружение активного (в данный момент) сервера и соединение с ним. Если параметр -M не указан, значит, -M отключен. Дополнительные сведения в статьях: Прослушиватели, подключение клиентов и отработка отказа приложений, Создание и настройка групп доступности (SQL Server), Отказоустойчивая кластеризация и группы доступности Always On (SQL Server) и Активные вторичные реплики. Доступ только для чтения к вторичным репликам (группы доступности Always On).
-N
С помощью этого переключателя клиент запрашивает шифрованное соединение.
-Pпароль
Пароль, задаваемый пользователем. В паролях учитывается регистр символов. Если используется параметр -U, а параметр -P не используется, а переменная среды SQLCMDPASSWORD не задана, программа sqlcmd запрашивает у пользователя пароль. Мы не рекомендуем использовать пароль null, но вы можете указать пароль null, используя пару непрерывных двойных кавычек для значения параметра:
Использование параметра-P должно считаться небезопасным. Не указываете пароль в командной строке. Кроме того, можно использовать переменную среды SQLCMDPASSWORD или ввести пароль в интерактивном режиме, опустив параметр-P.
Запрос на ввод пароля выводится на консоль следующим образом: Password: .
Вводимые пользователем данные на экране не отображаются, то есть символы не выводятся и курсор остается на месте.
Переменная среды SQLCMDPASSWORD позволяет задать значение пароля по умолчанию для текущего сеанса. Поэтому пароли не обязательно жестко кодируются в пакетные файлы.
В следующем примере сначала из командной строки устанавливается переменная SQLCMDPASSWORD, а затем производится вызов программы sqlcmd . В командной строке введите:
SET SQLCMDPASSWORD= [email protected]$$w0rd
В командной строке введите:
Если обнаружено неверное сочетание имени пользователя и пароля, выдается сообщение об ошибке.
Переменная среды OSQLPASSWORD была сохранена в целях обратной совместимости. Переменная среды SQLCMDPASSWORD имеет больший приоритет, чем OSQLPASSWORD. Теперь, когда переменная OSQLPASSWORD больше не указана, служебные программы sqlcmd и osql могут использоваться рядом друг с другом без помех. Старые скрипты продолжат работать.
Если параметр -P указан одновременно с параметром -E , выдается сообщение об ошибке.
Если после параметра -P указано более одного аргумента, выдается сообщение об ошибке, и программа завершает работу.
-S [протокол:]сервер[\имя_экземпляра][,порт]
Указывает экземпляр SQL Server, к которому выполняется подключение. Задает переменную скрипта SQLCMDSERVER программы sqlcmd .
Укажите значение имя_сервера, чтобы подключиться к экземпляру SQL Server по умолчанию на этом сервере. Укажите имя_сервера [ \имя_экземпляра ], чтобы подключиться к именованному экземпляру SQL Server на этом сервере. Если сервер не указан, программа sqlcmd выполняет подключение к экземпляру SQL Server по умолчанию на локальном компьютере. Этот параметр обязателен при запуске программы sqlcmd с удаленного компьютера в сети.
Параметрпротокол может иметь значение tcp (TCP/IP), lpc (общая память) или np (именованные каналы).
Если не указать server_name [ \instance_name ] при запуске sqlcmd, SQL Server проверяет и использует переменную среды SQLCMDSERVER.
Переменная среды OSQLSERVER была сохранена в целях обратной совместимости. Переменная среды SQLCMDSERVER имеет больший приоритет, чем переменная среды OSQLSERVER. Это означает, что программы sqlcmd и osql могут применяться одновременно, не мешая друг другу, и скрипты прежних версий не перестанут работать.
-Uидентификатор_входа
Является именем для входа или именем пользователя автономной базы данных. Для пользователей автономной базы данных нужно ввести параметр имени базы данных (-d).
В целях обратной совместимости доступна переменная среды OSQLUSER. Переменная среды SQLCMDUSER имеет больший приоритет, чем OSQLUSER. То есть программы sqlcmd и osql могут применяться одновременно, не мешая друг другу. Кроме того, это означает, что существующие скрипты osql не перестанут работать.
Если не указан ни параметр -U, ни параметр -P, sqlcmd пытается подключиться с помощью режима проверки подлинности Microsoft Windows. При этом используется учетная запись пользователя Windows, который запустил программу sqlcmd.
Если параметры -U и -E (описанные ниже в этой статье) указаны одновременно, то появляется сообщение об ошибке. Если после параметра -U указано более одного аргумента, выдается сообщение об ошибке и программа завершает работу.
-zновый_пароль
Сменить пароль:
-Zновый_пароль
Измените пароль и выйти:
Параметры ввода-вывода
-fкодовая_страница | i:кодовая_страница[,o:кодовая_страница] | o:кодовая_страница[,i:кодовая_страница]
Задает входные и выходные кодовые страницы. Номер кодовой страницы — это числовое значение, которое определяет установленную кодовую страницу Windows.
Правила преобразования кодовых страниц:
Если кодовые страницы не заданы, программа sqlcmd использует текущую кодовую страницу как для входных, так и для выходных файлов. Для входного файла в формате Юникод преобразование не требуется.
Программаsqlcmd автоматически распознает входные файлы в Юникоде как с прямым, так и с обратным порядком байтов. Если задан параметр -u , выходные данные всегда будут в Юникоде с прямым порядком байтов.
Если выходной файл не задан, то выходные данные будут иметь кодовую страницу консоли. Такой подход обеспечивает корректное отображение данных на консоли.
Предполагается, что все входные файлы имеют одинаковую кодовую страницу. Входные файлы в Юникоде и не в Юникоде можно обрабатывать вместе.
Чтобы проверить кодовую страницу Cmd.exe, введите в командной строке команду chcp .
-iвходной_файл[,входной_файл_2. ]
Указывает файл, содержащий пакет инструкций или хранимых процедур SQL. Можно указать несколько файлов, которые будут считываться и обрабатываться в указанном порядке. Не используйте пробелы между именами файлов. Сначала программаsqlcmd проверяет наличие всех указанных файлов. Если один или несколько файлов не существуют, программа sqlcmd завершит работу. Параметры -i и -Q/-q являются взаимоисключающими.
Пути к файлам, содержащие пробелы, необходимо заключать в кавычки.
Этот параметр можно использовать многократно: -iвходной_файл-II входной_файл.
-oвыходной_файл
Указывает файл, получающий выходные данные программы sqlcmd.
Если указан параметр -u , выходной_файл сохраняется в Юникоде. Если имя файла недопустимо, создается сообщение об ошибке, и программа sqlcmd завершает работу. sqlcmd не поддерживает одновременную запись нескольких процессов sqlcmd в один файл. В этом случае выводимые в файл данные будут неверны или повреждены. См. параметр -f, который также относится к форматам файлов. Этот файл будет создан, если он не существует. Файл от предыдущего сеанса программы sqlcmd с тем же именем будет перезаписан. Указанный здесь файл не является файлом stdout . Если указан файл stdout , этот файл не будет использоваться.
Пути к файлам, содержащие пробелы, необходимо заключать в кавычки.
-r[0 | 1]
Перенаправляет вывод сообщений об ошибке на экран (stderr). Если параметр не указан или задано значение 0, будут перенаправлены только сообщения об ошибках с уровнем серьезности 11 или выше. Если указать 1, то происходит перенаправление всех сообщений об ошибках (включая команду PRINT). Не имеет эффекта, если указан параметр -o. По умолчанию сообщения отправляются в stdout.
-R
Указывает sqlcmd, что локализация в столбцах числовых и денежных данных, значений даты и времени, полученных из SQL Server, должна выполняться с учетом языка и региональных параметров клиента. По умолчанию эти столбцы отображаются с использованием региональных параметров сервера.
-u
Указывает, что выходной_файл хранится в Юникоде независимо от формата файла входной_файл.
Параметры выполнения запросов
-e
Выдает входные скрипты на стандартное устройство вывода (stdout).
-I
Устанавливает значение ON для параметра соединения SET QUOTED_IDENTIFIER. По умолчанию установлено значение OFF. Дополнительные сведения см. в статье SET QUOTED_IDENTIFIER (Transact-SQL).
-q «запрос_командной_строки«
Выполняет запрос при запуске sqlcmd , но не завершает работу sqlcmd после завершения выполнения запроса. Может быть выполнено несколько запросов, разделенных точкой с запятой. Заключайте запрос в кавычки, как показано в следующем примере.
В командной строке введите:
sqlcmd -d AdventureWorks2012 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE ‘Whi%’;"
sqlcmd -d AdventureWorks2012 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
Не используйте в запросе признак конца GO.
Если вместе с этим параметром указан параметр -b , программа sqlcmd завершает работу при возникновении ошибки. Параметр -b описан выше в этой статье.
-Q «запрос_командной_строки«
Выполняет запрос при запуске программы sqlcmd и немедленно завершает работу sqlcmd. Может быть выполнено несколько запросов, разделенных точкой с запятой.
Заключайте запрос в кавычки, как показано в следующем примере.
В командной строке введите:
sqlcmd -d AdventureWorks2012 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE ‘Whi%’;"
sqlcmd -d AdventureWorks2012 -Q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
Не используйте в запросе признак конца GO.
Если вместе с этим параметром указан параметр -b , программа sqlcmd завершает работу при возникновении ошибки. Параметр -b описан выше в этой статье.
-tвремя_ожижания_запроса
Задает число секунд времени ожидания команды (или инструкции SQL). Этот параметр задает переменную скрипта SQLCMDSTATTIMEOUT программы sqlcmd . Если значение время_ожидания не указывается, то команда имеет неограниченное время ожидания. Значение время_ожидания_запроса должно быть числом в диапазоне от 1 до 65534. Если указанное значение не является числом или выходит за пределы указанного диапазона, sqlcmd выдает сообщение об ошибке.
Фактическое время ожидания может отличаться от указанного значения время_ожидания на несколько секунд.
-v var =значение[ var =значение. ]
Создает переменную скрипта sqlcmd, которая может быть использована в скрипте sqlcmd . Если значение содержит пробелы, заключите его в кавычки. Можно определить несколько значений var=«значения« . Если в каком-либо из указанных значений обнаружена ошибка, программа sqlcmd выдает сообщение и завершает работу.
sqlcmd -v MyVar1=something MyVar2="some thing"
sqlcmd -v MyVar1=something -v MyVar2="some thing"
-x
Указывает, что программа sqlcmd не должна обрабатывать переменные скрипта. Этот параметр полезен, когда скрипт содержит много инструкций INSERT, в которых могут быть строки с форматом, как у обычных переменных, например: «$(имя_переменной)».
Параметры форматирования
-hзаголовки
Указывает количество строк для печати между заголовками столбцов. По умолчанию заголовки печатаются один раз для каждого набора результатов запроса. Этот параметр задает переменную скрипта SQLCMDHEADERS программы sqlcmd . Используйте значение -1, чтобы отменить печать заголовков. Любое недопустимое значение приводит к тому, что программа sqlcmd выдает сообщение об ошибке и завершает работу.
-k [1 | 2]
Удаляет из выходных данных все управляющие символы, такие как символы табуляции и символы новой строки. Этот параметр сохраняет формат столбцов при возврате данных. При указании значения 1 управляющие символы заменяются одиночным пробелом. Если указано значение 2, все последовательные управляющие символы заменяются одиночным пробелом. Параметр -k аналогичен параметру -k1.
-sразделитель_столбцов
Задает символ-разделитель столбцов. Значением по умолчанию является пробел. Этот параметр задает переменную скрипта SQLCMDCOLSEP программы sqlcmd . Чтобы использовать символы, имеющие специальное значение для операционной системы, такие как амперсанд (&) или точка с запятой (;), заключайте этот символ в кавычки («). Разделитель столбцов может быть любым 8-разрядным символом.
-wscreen_width
Задает ширину экрана для вывода. Этот параметр задает переменную скрипта SQLCMDCOLWIDTH программы sqlcmd . Ширина столбца должна находиться в диапазоне от 8 до 65 536. Если указанное значение ширины столбца выходит за пределы заданного диапазона, sqlcmd выдает сообщение об ошибке. Ширина по умолчанию составляет 80 символов. Когда строка вывода превышает указанную ширину столбца, вывод переносится на следующую строку.
-W
Этот параметр удаляет конечные пробелы в столбце. При подготовке данных для экспорта в другое приложение указывайте этот параметр вместе с параметром -s . Не может указываться одновременно с параметром -y или -Y .
-yизменяемая_ширина_отображения
Задает переменную скрипта sqlcmd SQLCMDMAXVARTYPEWIDTH . Значение по умолчанию равно 256. Ограничивает число символов, возвращаемых для больших типов данных переменной длины:
varchar(max)
nvarchar(max)
varbinary(max)
xml
UDT (пользовательский тип)
text
ntext
image
Определяемые пользователем типы могут иметь фиксированную длину в зависимости от реализации. Если фиксированная длина определяемого пользователем типа короче, чем значение переменной ширина_отображения, то значение типа возвращается без изменений. Однако если длина превышает значение ширина_отображения, то производится усечение выходных данных.
Используйте параметр -y 0 с особой осторожностью, поскольку при большом объеме возвращаемых данных может значительно снизиться производительность сервера и сети.
-Yфиксированная_ширина_отображения
Задает переменную скрипта sqlcmd SQLCMDMAXFIXEDTYPEWIDTH . Значение по умолчанию 0 (неограниченно). Ограничивает число символов, возвращаемых для следующих типов данных:
char(n), где 1 <= n <= 8000
nchar(n), где 1 <= n<= 4000
varchar(n), где 1 <= n<= 8000
nvarchar(n), где 1 <= n<= 4000
varbinary(n), где 1 <= n<= 4000
sql_variant
Параметры отчетов об ошибках
-b
Указывает, что в случае ошибки программа sqlcmd завершает работу и возвращает значение DOS ERRORLEVEL. Значение, возвращаемое в переменную DOS ERRORLEVEL, равно 1, если сообщение об ошибке SQL Server имеет степень серьезности выше 10. В противном случае возвращаемое значение равно 0. Если параметр -V был указан вместе с параметром -b, программа sqlcmd не выдает сообщение об ошибке при степени серьезности ниже значения, заданного параметром -V. Пакетные файлы командной строки могут быть использованы для проверки значения ERRORLEVEL и для обработки ошибки соответствующим образом. Программаsqlcmd не выдает ошибки при степени серьезности 10 (информационные сообщения).
Если скрипт программы sqlcmd содержит неверный комментарий, синтаксическую ошибку или обнаружено отсутствие переменной скрипта, то возвращается значение ERRORLEVEL, равное 1.
-mуровень_ошибки
Управляет сообщениями об ошибках, отправляемыми в stdout. Отправляются сообщения с уровнем серьезности, превышающим или равным этому уровню. Если это значение равно -1, передаются все сообщения, в том числе информационные. Пробелы между параметрами -m и -1не допускаются. Например, параметр -m-1 является допустимым , а -m -1 — нет.
Кроме того, этот параметр задает переменную скрипта SQLCMDERRORLEVEL программы sqlcmd . По умолчанию ее значение равно 0.
-Vуровень_серьезности_ошибки
Управляет степенью серьезности, используемой для задания переменной ERRORLEVEL. Сообщения об ошибках со степенями серьезности, большими этого значения или равными ему, устанавливают переменную ERRORLEVEL. Значения меньше 0 сообщаются как 0. Пакетные файлы и CMD-файлы могут быть использованы для проверки значения переменной ERRORLEVEL.
Прочие параметры
-aразмер_пакета
Запрашивает пакет другого размера. Этот параметр задает переменную скрипта SQLCMDPACKETSIZE программы sqlcmd . Значениеразмер_пакета должно находиться в диапазоне от 512 до 32767. Значение по умолчанию = 4096. Увеличение размера пакета повышает производительность выполнения скриптов, содержащих большое количество инструкций SQL между командами GO. Можно запросить больший размер пакета. Но в случае отклонения запроса программа sqlcmd использует размер пакета по умолчанию для сервера.
-cконец_пакета
Задает признак конца пакета. По умолчанию команды завершаются и отправляются в SQL Server при вводе слова GO в отдельной строке. При сбросе признака конца пакета не используйте зарезервированные ключевые слова или символы Transact-SQL, которые имеют особое значение для операционной системы, даже если им предшествует обратная косая черта.
-L[c]
Выводит список локально настроенных серверов и имена серверов, осуществляющих передачу данных в сети. Этот параметр нельзя использовать в сочетании с другими параметрами. Максимальное число компьютеров серверов, которое можно указать, составляет 3 000. При усечении списка серверов в связи с нехваткой размера буфера выдается предупреждающее сообщение.
Из-за особенностей передачи широковещательных сообщений по сети программа sqlcmd не всегда своевременно получает ответ от всех серверов. Поэтому возвращаемый список серверов от вызова к вызову может различаться.
Если указать необязательный параметр c, данные будут выводиться без строки заголовка Servers: (Серверы), а в строке каждого сервера не будет начальных пробелов. Это представление называется «чистым выводом». Чистый выход улучшает производительность обработки языков скриптов.
-p[1]
Выводит на печать статистику производительности для каждого результирующего набора. Далее представлен пример формата для статистики производительности:
Network packet size (bytes): n
Clock Time (ms.): total t1 avg t2 (t3 xacts per sec.)
x = количество транзакций, обработанных SQL Server.
t1 = Общее время обработки всех транзакций.
t2 = среднее время обработки одной транзакции.
t3 = среднее количество транзакций, обрабатываемых в секунду.
Все значения времени приведены в миллисекундах.
Если указывается необязательный параметр 1 , статистика выводится в формате со столбцами, разделенными двоеточиями, и может быть легко импортирована в электронную таблицу или обработана скриптом.
Если необязательный параметр имеет любое значение, кроме 1, выводится сообщение об ошибке и программа sqlcmd завершает работу.
-X[1]
Отключает команды, которые могут поставить под угрозу безопасность системы при выполнении программы sqlcmd из пакетного файла. Отключенные команды по-прежнему распознаются. Программа sqlcmd выдает предупреждение и продолжает работу. Если необязательный параметр равен 1 , программа sqlcmd выдает сообщение об ошибке и завершает работу. При использовании параметра -X отключаются следующие команды:
ED
!!command
Указание параметра -X блокирует передачу переменных среды программе sqlcmd. Он также препятствует выполнению скрипта запуска, указанного с помощью переменной скрипта SQLCMDINI. Дополнительные сведения об использовании переменных скрипта sqlcmd см. в разделе Использование программы sqlcmd с переменными скрипта.
-?
Отображает версию программы sqlcmd и сводку по синтаксису параметров для sqlcmd .
Remarks
Параметры не обязательно должны использоваться в порядке, указанном в разделе синтаксиса.
Если возвращается несколько результатов, программа sqlcmd выводит между результирующими наборами в пакете пустую строку. Кроме того, сообщение не отображается, <x> rows affected если оно не применяется к выполненной инструкции.
Для работы с программой sqlcmd в интерактивном режиме в командной строке введите sqlcmd, указав любой из параметров, описанных ранее в этой статье. Дополнительные сведения см. в статье Использование программы sqlcmd
Параметры -L, -Q, -Z или -i приводят к завершению программы sqlcmd после выполнения.
Суммарная длина строки команды sqlcmd в командной среде (Cmd.exe), включая все аргументы и дополнительные переменные, равна допустимой длине строк для Cmd.exe, определяемой операционной системой.
Приоритет переменных (от низкого к высокому)
Переменные среды системного уровня.
Переменные среды пользовательского уровня.
Командная оболочка (SET X=Y), заданная в командной строке перед запуском программы sqlcmd.
sqlcmd-v X=Y
:Setvar X Y
Чтобы просмотреть переменные среды, в панель управления откройте system и перейдите на вкладку Дополнительно.
Переменные скрипта sqlcmd
| Переменная | Связанный параметр | Чтение-запись | По умолчанию |
|---|---|---|---|
| SQLCMDUSER | -U | R | «» |
| SQLCMDPASSWORD | -P | — | «» |
| SQLCMDSERVER | -S | R | «DefaultLocalInstance» |
| SQLCMDWORKSTATION | -H | R | «ComputerName» |
| SQLCMDDBNAME | -d | R | «» |
| SQLCMDLOGINTIMEOUT | -l | Чтение-запись | «8» (секунд) |
| SQLCMDSTATTIMEOUT | -T | Чтение-запись | «0» = неограниченное время ожидания |
| SQLCMDHEADERS | -H | Чтение-запись | «0» |
| SQLCMDCOLSEP | -S | Чтение-запись | » « |
| SQLCMDCOLWIDTH | -w | Чтение-запись | «0» |
| SQLCMDPACKETSIZE | -a | R | «4096» |
| SQLCMDERRORLEVEL | -M | Чтение-запись | 0 |
| SQLCMDMAXVARTYPEWIDTH | -y | Чтение-запись | «256» |
| SQLCMDMAXFIXEDTYPEWIDTH | -y | Чтение-запись | «0» = неограниченное время ожидания |
| SQLCMDEDITOR | Чтение-запись | «edit.com» | |
| SQLCMDINI | R | «» | |
| SQLCMDUSEAAD | \- G | Чтение-запись | «» |
Значения переменных SQLCMDUSER, SQLCMDPASSWORD и SQLCMDSERVER задаются при использовании команды :Connect (Подключиться).
Пометка «Чтение» означает, что значение может быть задано только один раз в процессе инициализации программы.
Пометка «Чтение/запись» означает, что переменная может быть изменена командой setvar и все последующие команды будут использовать новое значение.
Команды sqlcmd
В дополнение к инструкциям Transact-SQL в программе sqlcmd доступны следующие команды:
GO [число]
:List
[ : ] RESET
:Error
[ : ] ED
:Out
[:] !!
:Perftrace
[ : ] QUIT
:Connect
[ : ] EXIT
:On Error
:r
:Help
:ServerList
:XML [ON | OFF]
:Setvar
:Listvar
При использовании команд программы sqlcmd следует учитывать следующие особенности.
Все команды sqlcmd , за исключением GO, должны предваряться двоеточием (:).
Для поддержки обратной совместимости с существующими скриптами osql некоторые команды будут распознаваться без двоеточия [ : ].
Командыsqlcmd распознаются только в случае, если они введены в начале строки.
Во всех командах sqlcmd регистр символов не учитывается.
Каждая команда должна находиться на отдельной строке. За командой не может следовать инструкция Transact-SQL или другая команда.
Команды выполняются немедленно. Они не помещаются в буфер выполнения, как инструкции Transact-SQL.
Команды изменения
[ : ] ED
Производит запуск текстового редактора. Этот редактор может использоваться для изменения текущего пакета Transact-SQL или последнего выполненного пакета. Для изменения последнего выполненного пакета необходимо ввести команду ED сразу после выполнения последнего пакета.
Текстовый редактор определяется переменной среды SQLCMDEDITOR. Редактором по умолчанию является «Edit». Чтобы изменить редактор, установите переменную среды SQLCMDEDITOR. Например, чтобы установить в качестве редактора Блокнот (Майкрософт), в командной строке введите:
[ : ] RESET
Очистка кэша инструкций.
:List
Вывод содержимого кэша инструкций.
Переменные
:Setvar<var> [ «значение« ]
Определяет переменные скрипта sqlcmd . Переменные скрипта имеют следующий формат: $(VARNAME) .
Имена переменных не зависят от регистра символов.
Переменные скрипта могут быть установлены следующими способами.
Неявно, с помощью параметра командной строки. Например, параметр -l задает переменную скрипта SQLCMDLOGINTIMEOUT программы sqlcmd .
Явным образом, с помощью команды :Setvar .
Путем задания переменной среды до запуска программы sqlcmd.
Параметр -X предотвращает передачу переменных среды программе sqlcmd.
Если переменная, определенная с использованием :Setvar и переменной окружения, имеет одно и то же имя, переменная, определенная с помощью :Setvar имеет преимущество.
Имена переменных не должны содержать пробелы.
Имена переменных не могут иметь ту же форму, что и выражение переменной, например $(var).
Если строковое значение переменной скрипта содержит пробелы, то заключите значение в кавычки. Если значение для переменной скрипта не указано, переменная скрипта удаляется.
:Listvar
Список переменных скрипта, заданных в настоящее время.
Отображаются только переменные, заданные программой sqlcmdи командой :Setvar .
Команды вывода
:Error
<имя_файла>| STDERR|STDOUT
Перенаправляет вывод всех сообщений об ошибках в файл, указываемый параметром имя_файла, в поток stderr или stdout. Команда Error может встречаться в скрипте несколько раз. По умолчанию вывод об ошибках направляется в STDERR.
имя_файла
Создает и открывает файл, который принимает выходные данные. Если файл уже существует, он будет усечен до 0 байт. Если файл недоступен по причине нехватки разрешений или по другим причинам, вывод перенаправляется не в него, а в последнее указанное назначение или в назначение по умолчанию.
STDERR
Перенаправляет вывод сообщений об ошибках в поток stderr . Если было выполнено перенаправление, то адресат, которому был перенаправлен поток, получит выход ошибок.
STDOUT
Перенаправляет выход ошибок в поток stdout . Если было выполнено перенаправление, то адресат, которому был перенаправлен поток, получит выход ошибок.
:Out <имя_файла>| STDERR| STDOUT
Создает и переадресовывает все результаты запроса в файл, указываемый параметром имя_файла, в stderr или stdout. По умолчанию вывод направляется в stdout. Если файл уже существует, то он усекается до 0 байт. Команда Out может встречаться в скрипте несколько раз.
:Perftrace <имя_файла>| STDERR| STDOUT
Создает и переадресовывает все данные трассировки производительности в файл, указываемый параметром имя_файла, в stderr или stdout. По умолчанию вывод о трассировки производительности направляется в stdout. Если файл уже существует, то он усекается до 0 байт. Команда Perftrace может встречаться в скрипте несколько раз.
Команды контроля выполнения
:On Error[ exit | ignore]
Установка действия, выполняемого при возникновении ошибки во время исполнения скрипта или пакета.
Если используется параметр exit , программа sqlcmd завершает работу с возвратом соответствующего значения ошибки.
Если указан параметр ignore , программа sqlcmd пропускает ошибку и продолжает выполнять пакет или скрипт. По умолчанию выводится сообщение об ошибке.
[ : ] QUIT
Ведет к завершению работы sqlcmd .
[ : ] EXIT[ (инструкция) ]
Позволяет использовать результат инструкции SELECT в качестве возвращаемого значения программы sqlcmd. Если числовой, первый столбец последней строки результатов преобразуется в 4-байтовое целое число (long). В MS-DOS, Linux и Mac младший байт передается родительскому процессу или уровню ошибки операционной системы. В Windows 200x передается 4-байтовое целое число. Синтаксис:
Также можно включить параметр EXIT в пакетный файл. Например, в командной строке введите:
sqlcmd -Q "EXIT(SELECT COUNT(*) FROM ‘%1’)"
Программа sqlcmd отправляет на сервер все, что заключено в круглые скобки () . Если хранимая системная процедура выбирает набор и возвращает значение, то возвращается только выбранный набор. Инструкция EXIT**()** с пустыми круглыми скобками выполняет все, что предшествует ей в пакете, а затем завершается без возврата значения.
Если указан неверный запрос, программа sqlcmd завершает работу без возврата значения.
Список форматов инструкции EXIT:
- :EXIT
Не выполняет пакет, немедленно завершает работу и не возвращает значения.
- :EXIT( )
Выполняет пакет, завершает выполнение и не возвращает значения.
- :EXIT(query)
Выполняет пакет, включая запрос, возвращает результаты запроса и завершает работу.
Если в скрипте sqlcmd используется параметр RAISERROR и при этом возникает состояние 127, программа sqlcmd завершает работу и возвращает клиенту идентификатор сообщения. Пример:
RAISERROR(50001, 10, 127)
Эта ошибка приведет к завершению скрипта sqlcmd , а клиенту будет возвращено сообщение с идентификатором 50001.
Возвращаемые значения от –1 до –99 резервируются SQL Server. Программа sqlcmd дополнительно определяет следующие возвращаемые значения:
| Возвращаемые значения | Описание |
|---|---|
| –100 | Перед выбором возвращаемого значения произошла ошибка. |
| –101 | При выборе возвращаемого значения не найдены строки. |
| –102 | При выборе возвращаемого значения произошла ошибка преобразования. |
GO [число]
GO обозначает конец пакета и выполнение любых кэшированных инструкций Transact-SQL. Пакет выполняется несколько раз в виде отдельных пакетов. Нельзя объявить переменную более одного раза в одном пакете.
Прочие команды
:r <имя_файла>
Производит синтаксический анализ дополнительных инструкций Transact-SQL и команд программы sqlcmd в файле <имя_файла>, загружая их в кэш инструкций.
Если файл содержит инструкции Transact-SQL, за которыми не следует ключевое слово GO, необходимо ввести GO в строку, следующую за :r.
<имя_файла> считывается относительно стартового каталога, в котором была запущена программа sqlcmd.
Файл будет считан и выполнен после обнаружения признака конца пакета. Можно указывать несколько команд :r . В файле могут содержаться любые команды программы sqlcmd , в том числе признак конца пакета GO.
Число строк, отображаемых в интерактивном режиме, для каждой найденной команды :r будет увеличено на 1. Команда :r отображается в выводе команды list.
:Serverlist
Выводит список локально настроенных серверов и имена серверов, осуществляющих трансляцию данных в сети.
:Connectимя_сервера[\имя_экземпляра] [-l время_ожидания] [-U имя_пользователя [-P password]]
Соединяется с экземпляром SQL Server. Также закрывает текущее соединение.
Параметры времени ожидания:
| Значение | Поведение |
|---|---|
| 0 | ждать бесконечно |
| n>0 | ждать в течение n секунд |
Переменная скрипта SQLCMDSERVER отображает текущее активное соединение.
Если не указан параметр timeout , то берется значение переменной SQLCMDLOGINTIMEOUT по умолчанию.
Если указано только имя_пользователя (в виде параметра или в виде переменной среды), у пользователя будет запрошен пароль. Однако пользователи не получают запрос, если установлены переменные среды SQLCMDUSER или SQLCMDPASSWORD. Если никаких параметров и переменных среды не указано, для входа используется режим проверки подлинности Windows. Например, для подключения к экземпляру SQL Server ( instance1 ) с именем myserver с использованием встроенной безопасности следует ввести следующую команду:
Для подключения к экземпляру myserver по умолчанию с использованием переменных скрипта следует ввести следующее выражение:
:setvar myusername test
:setvar myservername myserver
:connect $(myservername) $(myusername)
[ : ] !!<команда>
Исполнение команд операционной системы. Чтобы выполнить команду операционной системы, начните строку с двух восклицательных знаков ( !! ) и далее укажите команду операционной системы. Пример:
Команда выполняется на компьютере, где запущена программа sqlcmd .
:XML [ON | OFF]
Дополнительные сведения см. в разделах этой статьи Формат вывода XML и Формат вывода JSON.
:Help
Выводит список команд программы sqlcmd вместе с кратким описанием.
Имена файлов sqlcmd
Входные файлыsqlcmd можно указать с помощью параметра -i или команды :r . Выходные файлы можно указать параметром -o или командами :Error, :Out и :Perftrace . При работе с этими файлами следует придерживаться следующих правил.
:Error, :Out и :Perftrace должно быть указано отдельное <имя_файла > . Одинаковое <имя_файла > может привести к смешиванию входных данных команд.
Если входной файл, вызываемый из программы sqlcmd на локальном компьютере, расположен на удаленном сервере и путь к нему содержит букву диска (например, «:Оut c:\OutputFile.txt»), то выходной файл создается на локальном компьютере, а не на удаленном сервере.
Допустимы следующие пути: C:\<filename> , \\<Server>\<Share$>\<filename> и "C:\Some Folder\<file name>" . Если путь содержит пробелы, его необходимо заключить в кавычки.
Каждый новый сеанс программы sqlcmd перезаписывает существующие файлы с теми же именами.
Информационные сообщения
Программаsqlcmd выводит все информационные сообщения, отправляемые сервером. В следующем примере после выполнения инструкций Transact-SQL выводится информационное сообщение.
Введите в командную строку следующую команду.
В командной строке sqlcmd введите:
При нажатии клавиши ВВОД выводится следующее информационное сообщение: Контекст базы данных изменен на AdventureWorks2012.
Формат вывода результатов выполнения запросов Transact-SQL
Сначала программаsqlcmd выводит заголовок с именами столбцов, перечисленными в списке выборки, которые разделяются символом, определенным в переменной SQLCMDCOLSEP. По умолчанию это пробел. Если имя столбца короче, чем ширина столбца, выходные данные дополняются пробелами до начала следующего столбца.
За этой строкой следует линия разделителя, которая представляет собой последовательность дефисных символов. Далее представлен пример вывода.
Запустите программу sqlcmd. Введите в командную строку sqlcmd следующий запрос.
SELECT TOP (2) BusinessEntityID, FirstName, LastName
После нажатия клавиши ВВОД отобразится следующий результирующий набор.
BusinessEntityID FirstName LastName
293 Catherine Abel
(2 row(s) affected)
Хотя столбец BusinessEntityID имеет ширину в четыре символа, она была увеличена, чтобы вместить более длинное имя столбца. По умолчанию вывод заканчивается на 80 символе. Это можно изменить с помощью параметра -w , либо задав переменную скрипта SQLCMDCOLWIDTH.
Формат вывода XML
Выходные XML-данные, получаемые в результате выполнения предложения FOR XML, выводятся непрерывным потоком в неформатированном виде.
Если вы ожидаете вывод XML-данных, воспользуйтесь следующей командой: :XML ON .
Программаsqlcmd выводит сообщения об ошибках в обычном формате. Обратите внимание, что сообщения об ошибках также выводятся в текстовый поток в формате XML. Если указать параметр :XML ON , программа sqlcmd не выводит информационные сообщения.
Чтобы отключить режим XML, введите следующую команду: :XML OFF .
Команда GO не должна стоять раньше команды XML OFF, поскольку последняя возвращает sqlcmd в режим вывода с построчным форматированием.
Смешивание XML-данных (потоковых) и данных набора строк не допускается. Если перед выполнением инструкции Transact-SQL, которая выводит потоки XML-данных, не была введена команда XML ON, то вывод будет искажен. Если была выполнена команда XML ON, то выполнить инструкции Transact-SQL, которые выводят обычные наборы строк, нельзя.
Команда :XML не поддерживает инструкцию SET STATISTICS XML.
Формат вывода JSON
Если ожидается вывод данных JSON, воспользуйтесь следующей командой: :XML ON . В противном случае выходные данные содержат как имя столбца, так и текст JSON. Эти данные не являются допустимой JSON.
Чтобы отключить режим XML, введите следующую команду: :XML OFF .
Дополнительные сведения см. в разделе Формат вывода XML этой статьи.
Использование аутентификации Azure Active Directory
Примеры использования проверки подлинности Azure Active Directory:
Рекомендации по использованию sqlcmd
Чтобы добиться максимальной безопасности и эффективности, придерживайтесь следующих правил.
Используйте встроенную безопасность.
В автоматических средах указывайте параметр -X[1] .
Обеспечьте защиту входных и выходных файлов при помощи соответствующих разрешений файловой системы NTFS.
В целях повышения производительности выполняйте как можно больше работы в одном сеансе программы sqlcmd .
Задайте значение времени ожидания для выполнения пакетов или запросов выше, чем ожидаемое время их выполнения.
Чтобы добиться максимальной правильности, придерживайтесь следующих правил.
Для регистрации любых сообщений уровня серьезности 16 используйте параметр -V16. Сообщения уровня 16 обозначают общие ошибки, которые могут быть исправлены пользователем.
После завершения процесса проверьте код завершения и переменную DOS ERRORLEVEL. В обычном режиме sqlcmd возвращает 0, в противном случае — устанавливает уровень ошибки (ERRORLEVEL), настроенный с помощью -V. Другими словами, не следует ожидать, что ERRORLEVEL будет иметь то же значение, что и Error Number (номер ошибки), полученный от SQL Server. Error Number — это характерное для SQL Server значение, соответствующее системной функции @@ERROR. ERRORLEVEL — это характерное для служебной программы sqlcmd значение, указывающее, почему она завершила работу. На это значение влияет указание аргумента командной строки -b.
Использование -V16 в сочетании с проверкой кода завершения и DOS ERRORLEVEL может помочь в поиске ошибок в автоматических средах, особенно при проверках качества перед производственным выпуском.
Начало работы с Microsoft SQL Server 2005 (Урок 1)

Подавляющую массу задач администрирования SQL Server можно выполнить в графической утилите SQL Server Management Studio. В ней можно создавать базы данных и все ассоциированные с ними объекты (таблицы, представления, хранимые процедуры и др.). Здесь вы можете выполнить последовательности инструкций Transact-SQL (запросы). В этой утилите можно выполнить типовые задачи обслуживания баз данных, такие как резервирование и восстановление. Здесь можно настраивать систему безопасности базы данных и сервера, просматривать журнал ошибок и многое другое.
Для запуска Management Studio в меню «Пуск» операционной системы выберите пункт «Microsoft SQL Server 2005\SQL Server Management Studio». Когда откроется окно программы, вас попросят подключиться к какому либо серверу баз данных SQL Server.
Подключение к серверу
В окне «Соединение с сервером» необходимо указать следующую информацию:
Тип сервера. Здесь следует выбрать, к какой именно службе необходимо подключится. Оставьте вариант «Компонент Database Engine».
Имя сервера. Позволяет указать, к какому серверу будет осуществляться подключение. По умолчанию имя SQL Server совпадает с именем компьютера. Выберите ваш локальный компьютер.
Проверка подлинности. Способ аутентификации, можно выбрать «Проверка подлинности Windows» или «Проверка подлинности SQL Server». Первый способ использует учетную запись, под которой текущий пользователь осуществил вход в Windows. Вариант SQL Server использует свою собственную систему безопасности. Оставьте вариант проверки подлинности Windows.
После подключения экземпляр сервера будет отображаться на панели «Обозреватель объектов».
Окно Management Studio имеет следующую структуру:
Оконное меню – содержит полный набор команд для управления сервером и выполнения различных операций.
Панель инструментов – содержит кнопки для выполнения наиболее часто производимых операций. Внешний вид данной панели зависит от выполняемой операции.
Панель «Обозреватель объектов». Это панель с древовидной структурой, отображающая все объекты сервера, а также позволяющая производить различные операции, как с самим сервером, так и с его базами данных и их объектами. Обозреватель объектов является основным инструментом для разработки.
Рабочая область. В рабочей области производятся все действия с базой данных, а также отображается её содержимое.
Прежде чем перейти к созданию своих собственных рабочих баз данных рассмотрим служебные базы данных SQL Server, которые создаются автоматически в процессе его установки. Если мы раскроем узел «Базы данных – Системные базы данных» в обозревателе объектов, то увидим следующий набор служебных баз данных:
master. Главная служебная база данных всего сервера. В ней хранится общая служебная информация сервера: настройки его работы, список баз данных на сервере с информацией о настройках каждой базы данных и ее файлах, информация об учетных записях пользователей, серверных ролях и т.п.
msdb. Эта база данных в основном используется для хранения информации службы SQL Server Agent (пакетных заданий, предупреждений и т.п.), но в нее записывается и другая служебная информация (например, история резервного копирования).
model. Эта база данных является шаблоном для создания новых баз данных в SQL Server. Если внести в нее изменения, например, создать набор таблиц, то эти таблицы будут присутствовать во всех создаваемых базах данных.
tempdb. Эта база данных предназначена для временных таблиц и хранимых процедур, создаваемых пользователями и самим SQL Server. Эта база данных создается заново при каждом запуске SQL Server.
Создание пользовательских баз данных
База данных представляет собой группу файлов, хранящихся на жестком диске. Эти файлы могут относиться к трем типам: файлы с первичными данными, файлы с вторичными данными и файлы журнала транзакций. Любая база данных SQL Server содержит, по крайней мере, два файла: первичный файл данных (с расширением .mdf) и файл журнала транзакций (с расширением .ldf). Существует два способа их создания:
графически с помощью SQL Server Management Studio
посредством кода Transact-SQL
Создание баз данных в SQL Server Management Studio
Использование данной утилиты является самым простым способом создания базы данных. Создадим базу данных Sales (Продажи), которую позже заполним таблицами, представлениями и другими объектами, предназначенными для отдела продаж.
В окне «Обозреватель объектов» найдите и раскройте папку «Базы данных». Щелкните на ней правой кнопкой мыши и выберите команду «Создать базу данных…».
В открывшемся диалоговом окне «Создание базы данных» на странице «Общие» введите следующую информацию:
Имя базы данных: Sales (может быть любым)
В таблице «Файлы базы данных» измените путь к файлам данных и журнала на ваш каталог.
Для всех остальных параметров оставьте значения по умолчанию.
Для создания базы данных щелкните «OK». Вы должны увидеть свою новую базу данных в окне «Обозреватель объектов».
Создание баз данных с помощью Transact-SQL
Для программного создания базы данных (например, в программе установки приложения) используется инструкция CREATE DATABASE языка T-SQL (сокращенная форма от Transact- SQL). Данная инструкция может включать в себя множество опций, определяющих различные параметры новой базы данных. Сценарий создания новой базы данных может быть сгенерирован на основе уже существующей базы данных.
Для этого в SQL Server Management Studio в контекстном меню узла «Sales» выберите команду «Создать сценарий для базы данных – Используя CREATE – В новом окне редактора запросов». В результате на экране появится вкладка с текстом запроса на создание новой базы данных с параметрами, указанными при создании базы данных Sales в Management Studio. При необходимости текст запроса может быть изменен в этом же окне.
Рассмотрим основные опции сгенерированной инструкции CREATE DATABASE:
Имя новой базы данных. Указывается непосредственно после ключевого слова CREATE DATABASE. В данном случае это Sales.
ON. Это опция указывает на файловую группу, которая представляет собой логическую группу вторичных файлов данных и используется для управления размещением пользовательских объектов (таких как таблицы и индексы). Опция PRIMARY после аргумента ON используется для указания группы файлов PRIMARY, в которую по умолчанию входят все созданные файлы, и которая является единственной группой файлов, содержащей первичный файл данных.
NAME. Логическое имя базы данных, которое будет применяться для ссылки на нее из кода T-SQL.
FILENAME. Это имя и путь файла базы данных, хранящегося на жестком диске.
SIZE. Исходный размер файлов данных.
MAXSIZE. Максимальный размер, до которого может расти база данных.
FILEGROWTH. Это приращение расширения файла
Параметры в разделе LOG ON аналогичны параметрам в разделе CREATE DATABASE. Однако они определяют параметры файла журнала транзакций.
Общий синтаксис инструкции CREATE DATABASE со всеми возможными опциями можно посмотреть в справочной системе. Для этого в редакторе запросов выделите слова CREATE DATABASE и нажмите клавишу F1.
Для проверки работоспособности сгенерированного запроса на создание базы данных удалим базу данных Sales. В контекстном меню базы данных выберите команду «Удалить» и в появившемся диалоговом окне нажмите кнопку «OK». База данных со всеми файлами должна исчезнуть.
Для выполнения созданного запроса T-SQL на создание базы данных нажмите на панели инструментов кнопку «Выполнить». После чего обновите содержимое дерева обозревателя объектов командой «Обновить» из контекстного меню узла «Базы данных». База данных Sales должна вновь появиться в списке доступных.
Отсоединение и присоединение базы данных
Для переноса базы данных на другой сервер необходимо отсоединить ее от текущего сервера. Для этого в контекстном меню базы данных Sales выберите команду «Задачи — Отсоединить…». В диалоговом окне «Отсоединение базы данных» нажмите кнопку «OK» и убедитесь, что Sales исчезла из списка баз данных в дереве обозревателя объектов. Теперь файлы базы данных могут быть перенесены на другой сервер.
Инструментарий разработчика: SQL Assistant
Я работаю разработчиком БД (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 и получаю код:
Далее продолжаю построение запроса, набираю inner join и ассистент показывает список таблиц, на которые существуют внешние ключи уже из таблицы ProductInventory, но так же доступны и соединения от таблицы Product.

Построение связей работает в именно в разделе from, т.е. и для select, insert, delete, update. Если необходимо построить соединение между таблицам не связанными внешним ключом, то необходимо указать эти таблицы и SQL Assistant может предложить построить связь по полям с одинаковыми названиями.
Полученный код запроса:
Приводиться в нужный вид с помощью функции форматирования. Правила форматирования кода настраиваемые.
Переместив курсор в раздел select ассистент покажет подсказку для выбора полей, которые будут включены в выборку, из таблиц, перечисленных в разделе from. Такой же принцип в любом разделе запроса (where, group by, order by).

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

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

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

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

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

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

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