Постоянные читатели журнала, возможно, заметили, что я стал чаще писать о сценариях и некоторых развивающихся платформах и инструментах для взаимодействия с Microsoft SQL Server. Тому есть объяснение, но пока я не могу вдаваться в подробности. Достаточно сказать, что нас ждет дивный новый мир SQL Server на Linux, в котором взаимодействие с нашими экземплярами не ограничено средой Microsoft SQL Server Management Studio.
В этой статье речь пойдет об SQLCMD — инструменте командной строки, который используется для взаимодействия с Microsoft SQL Server.
Это не новый инструмент, он появился несколько десятков лет назад. Вы можете запускать SQLCMD не только из приложения командной строки Command, встроенного в Windows, но и из среды SQL Server Management Studio (SSMS).
Многие новые инструменты и методы взаимодействия с Microsoft SQL Server основаны на синтаксисе, используемом SQLCMD. Я взялся за эту ознакомительную статью, чтобы помочь вам разобраться в следующих вопросах:
- Запуск SQLCMD из командной строки.
- Основной синтаксис для подключения к Microsoft SQL Server с использованием SQLCMD.
- Основной синтаксис для передачи запросов в экземпляр Microsoft SQL Server с помощью SQLCMD.
- Выполнение запросов с использованием SQLCMD из среды SQL Server Management Studio.
Запуск SQLCMD из командной строки
Прежде чем подключиться к Microsoft SQL Server с помощью SQLCMD, необходимо запустить его. Конечно, сделать это очень просто, но, как вы знаете, мой подход заключается в том, чтобы провести вас по всем шагам от А до Я, не пропуская ни одного действия и не предполагая, что вам известны даже самые простые этапы процесса. Всегда досадно, когда не удается выполнить описанные в инструкции действия из-за отсутствия некоторых деталей. В своих статьях я стараюсь избежать таких упущений. В данном случае запустить SQLCMD настолько просто, что мне, вероятно, потребовалось в пять раз больше места, чтобы объяснить, почему я подробно разбираю столь элементарные вещи, чем на описание самого процесса.
Итак, нажмите комбинацию клавиш Windows + R, чтобы открыть окно выполнения, введите cmd, чтобы запустить приложение Command, а затем введите sqlcmd в ответ на приглашение и следом одну из многочисленных возможных комбинаций строк подключения, которые описаны ниже.
После успешного подключения вы получите приглашение вида «1>», чтобы начать взаимодействие с SQLCMD. При необходимости можно предоставить запрос как часть начального подключения для немедленной обработки, в соответствии с описанием, приведенным далее в статье.
Базовый синтаксис SQLCMD для установки подключения SQL Server
Как инструмент командной строки, SQLCMD представляет собой комбинацию команд и параметров. Ниже перечислены наиболее распространенные параметры, необходимые для организации подключения к экземпляру SQL Server, на котором выполняются инструкции.
Параметр сервера
- -S: указывает имя сервера или имя сервера/экземпляра в случае именованного экземпляра.
Параметры проверки подлинности
- -U: указывает имя пользователя при использовании проверки подлинности SQL Server;
- -P: пароль для пользователя, указанного в параметре -U;
- -E: обозначает использование доверенной проверки подлинности (Active Directory). Этот параметр выбран по умолчанию и не обязательно вводится при использовании доверенной проверки подлинности. Ниже приведены два примера инструкций подключения с помощью SQLCMD.
Сначала выполняется доверенная проверка подлинности для экземпляра по умолчанию с последующим именованным экземпляром:
sqlcmd -S <имя сервера> sqlcmd -S <имя сервера>\ <имя экземпляра>
При использовании доверенной проверки подлинности параметры -S остаются идентичными, достаточно просто указать имя пользователя и пароль:
sqlcmd -S <имя сервера > -U <имя пользователя > -P <пароль> sqlcmd -S <имя сервера>\ <имя экземпляра> -U <имя пользователя> -P <пароль>
При использовании проверки подлинности SQL Server можно опустить параметр -P в целях безопасности, и тогда во время выполнения будет запрошен пароль.
Параметры ввода
Существует два способа передать запрос в экземпляр SQL Server: как входной файл или нерегламентированный запрос.
- -Q или -q: текст запроса, передаваемого в экземпляр SQL Server;
- -i: предоставляет полный путь и имя файла, обрабатываемого экземпляром SQL Server.
Параметры вывода
- -o: предоставляет полный путь и имя файла для публикации результатов запроса.
В действительности список параметров гораздо больше. Чтобы получить дополнительные сведения, введите команду
sqlcmd -?
Две команды, на которые следует обратить внимание, управляют запуском скрипта и выходом из SQLCMD.
- GO: в отличие от знакомого вам аналога T-SQL, GO — не просто инструкция завершения пакета, а команда, выполняющая команду в SQLCMD.
- EXIT: эта команда завершает текущий сеанс SQLCMD. Впоследствии, чтобы установить активный сеанс, вам потребуется повторно ввести сведения о подключении.
Помните, что для всех перечисленных параметров используется синтаксис, обеспечивающий одновременный запуск SQLCMD и подключение к экземпляру SQL Server. Если вы уже запустили SQLCMD и получили приглашение «1>», то можно избавиться от инструкции sqlcmd в начале всех приведенных выше фрагментов программного кода.
Базовый синтаксис SQLCMD для выполнения запросов
Используя лишь эти несколько параметров, с помощью SQLCMD можно решать почти любые задачи. Рассмотрим три различных варианта применения описанных выше параметров.
Сценарий 1. Подключить экземпляр SQL Server по умолчанию с использованием проверки подлинности SQL и выполнить команду, которая составляет список имен всех баз данных в выходном файле:
sqlcmd -S <имя сервера> -U <имя пользователя> -P <пароль> -i "SELECT name FROM master;" -o c:\temp\db.txt
Сценарий 2. Подключить именованный экземпляр SQL Server с использованием доверенной проверки подлинности и выполнить последовательность команд из входного файла, отображая результаты команды в выходном файле:
sqlcmd -S <имя сервера>\ <имя экземпляра> -i C:\temp\sqlscript.sql -o c:\temp\db.txt
Сценарий 3. Подключить экземпляр SQL Server по умолчанию с использованием доверенной проверки подлинности и выполнить команду, которая выводит список имен всех баз данных непосредственно на экран:
sqlcmd -S <имя сервера > -i
"SELECT name FROM master;"
Использование SQLCMD из среды SQL Server Management Studio
Теперь, когда мы рассмотрели основные особенности подключения к SQLCMD и выполнения запросов из командной строки, обратим внимание на возможность выполнять форматированные скрипты SQLCMD из среды SQL Server Management Studio. Это превосходный способ продолжить использование уникальных функций сценариев, о которых я подробнее расскажу в следующей статье на тему SQLCMD, когда нужно запустить один скрипт, охватывающий несколько экземпляров последовательно.
Откройте новое окно запроса в среде SQL Server Management Studio. Необходимо поставить SSMS в известность, что этот запрос будет выполняться с помощью SQLCMD. Для этого перейдите к строке меню в верхней части экрана и выберите Query («Запрос»), а затем SQLCMD Mode («Режим SQLCMD»).
Выполним простое подключение к серверу. Сделать это можно с использованием доверенной проверки подлинности и простой команды:
: CONNECT <имя сервера>
Запрос немедленно отключается от экземпляра SQL после завершения выделенного вами текста запроса при его выполнении или полного содержимого запроса.
Нечто подобное приведенному ниже варианту демонстрирует возможность подключиться к экземпляру SQL Server (в данном случае используется локальный экземпляр SQL Server) и возвратить имя сервера и список всех баз данных на экземпляре:
: Connect. SELECT @@SERVERNAME, name FROM master.sys.databases ORDER BY name;
Конечно, это упрощенный подход с точки зрения запроса, но моя задача — рассмотреть различные варианты подготовки сценариев и использования SQLCMD. В следующей статье я расскажу об использовании SQLCMD в среде SSMS, что значительно облегчает работу со скриптами, требующими нескольких подключений для выполнения задачи.
Итак, теперь вы можете использовать SQLCMD из приложения Command операционной системы Windows или из среды SQL Server Management Studio. Кроме того, вы можете организовать подключение всего с несколькими необходимыми параметрами, знакомыми каждому, кто хотя бы немного работал с SQL Server, и передать запрос в SQL Server через SQLCMD для обработки.