Изменение сценариев SQLCMD при помощи редактора запросов
В редакторе запросов компонента Database Engine в среде SQL Server Management Studio можно писать и изменять запросы в виде сценариев SQLCMD. Сценарии SQLCMD применяются в тех случаях, когда необходимо обработать системные команды Windows и инструкции Transact-SQL в одном и том же сценарии.
Режим SQLCMD
Чтобы при помощи редактора запросов компонента Database Engine писать и изменять сценарии SQLCMD, необходимо включить режим сценариев SQLCMD. По умолчанию режим сценариев SQLCMD в редакторе запросов отключен. Режим сценариев можно включить, нажав кнопку Режим SQLCMD на панели инструментов или выбрав пункт Режим SQLCMD в меню Запрос.
Примечание |
---|
При включении режима сценариев SQLCMD отключается функция IntelliSense и отладчик Transact-SQL в редакторе запросов Database Engine. |
В сценариях SQLCMD в редакторе запросов можно использовать те же возможности, что и в любых других сценариях Transact-SQL. К таким средствам относятся:
выделение цветом;
выполнение сценариев;
система управления версиями;
синтаксический анализ сценариев;
Showplan
Включение режима сценариев SQLCMD в редакторе запросов
Включить режим сценариев SQLCMD для активного окна редактора запросов компонента Database Engine можно при помощи следующей процедуры.
Переключение окна редактора запросов компонента Database Engine в режим сценариев SQLCMD
В обозревателе объектов щелкните сервер правой кнопкой мыши и выберите команду Создать запрос, чтобы открыть новое окно редактора запросов компонента Database Engine.
В меню Запрос выберите команду Режим SQLCMD.
Редактор запросов выполняет инструкции sqlcmd в контексте редактора запросов.
На панели инструментов Редактор SQL в списке Доступные базы данных выберите пункт AdventureWorks.
В окне редактора запросов введите следующие две инструкции Transact-SQL и инструкцию !!DIRsqlcmd:
SELECT DISTINCT Type FROM Sales.SpecialOffer; GO !!DIR GO SELECT ProductCategoryID, Name FROM Production.ProductCategory; GO
Нажмите клавишу F5, чтобы выполнить весь раздел, составленный из инструкций Transact-SQL и MS-DOS.
Обратите внимание на две области с результатами выполнения первой и третьей инструкций SQL.
В области Результаты перейдите на вкладку Сообщения, чтобы просмотреть сообщения всех трех инструкций.
(Обработано строк: 6)
<Данные каталога>
(Обработано строк: 4)
Важно! |
---|
При выполнении из командной строки программа sqlcmd позволяет добиться полного взаимодействия с операционной системой. Используя редактор запросов в Режиме SQLCMD, будьте внимательны, чтобы не запустить интерактивные инструкции. Редактор запросов не может моментально ответить операционной системе. |
Дополнительные сведения о выполнении SQLCMD см. в разделе Программа sqlcmd или изучите учебник по SQLCMD.
Включение режима сценариев SQLCMD по умолчанию
Чтобы режим сценариев SQLCMD включался по умолчанию, в меню Сервис выберите пункт Параметры, раскройте узлы Выполнение запроса и SQL Server, перейдите на страницу Общие и установите флажок Открывать новые запросы в режиме SQLCMD.
Создание и изменение сценариев SQLCMD
После включения режима сценариев можно писать команды SQLCMD и инструкции Transact-SQL. При этом действуют следующие правила:
команда SQLCMD должна быть первой инструкцией в строке;
в каждой строке разрешается только одна команда SQLCMD;
перед командами SQLCMD могут идти комментарии или пробелы;
команды SQLCMD внутри символов комментария не выполняются;
символами однострочных комментариев являются два дефиса (--), они должны находиться в начале строки;
перед командами операционной системы должны стоять два восклицательных знака (!!). Два восклицательных знака означают, что следующая за ними команда должна выполняться с помощью командного процессора cmd.exe. Текст, следующий после !!, передается как параметр cmd.exe, поэтому полная командная строка будет иметь вид: "%SystemRoot%\system32\cmd.exe /c <text after !!>".
чтобы четко различать команды SQLCMD и Transact-SQL, ко всем командам SQLCMD необходимо добавлять префикс в виде двоеточия (:);
команда GO может использоваться без вводной части или предваряться «!!:»;
Редактор запросов компонента Database Engine поддерживает переменные среды и переменные, определенные в сценарии SQLCMD, однако не поддерживает встроенные переменные SQLCMD и osql. Обрабатываемый код SQLCMD среды SQL Server Management Studio чувствителен к регистру переменных. Например, PRINT '$(COMPUTERNAME)' выдаст правильный результат, а PRINT '$(ComputerName)' приведет к ошибке.
Внимание! |
---|
В среде SQL Server Management Studio для выполнения в обычном режиме и режиме SQLCMD используется Microsoft.NET FrameworkSqlClient. При вызове из командной строки SQLCMD использует поставщика OLE DB. Так как могут применяться различные параметры по умолчанию, выполнение одного и того же запроса в среде SQL Server Management Studio в режиме SQLCMD и в программе SQLCMD может проходить по-разному. |
Поддерживаемый синтаксис SQLCMD
Редактор запросов компонента Database Engine поддерживает следующие ключевые слова сценариев SQLCMD:
[!!:]GO[count]
!! <command>
:exit(statement)
:Quit
:r <filename>
:setvar <var> <value>
:connect server[\instance] [-l login_timeout] [-U user [-P password]]
:on error [ignore|exit]
:error <filename>|stderr|stdout
:out <filename>|stderr|stdout
Примечание |
---|
Для :error и :out, stderr и stdout вывод направляется на вкладку сообщений. |
Команды SQLCMD, не перечисленные выше, редактором запросов не поддерживаются. Если выполняется сценарий, содержащий неподдерживаемые ключевые слова SQLCMD, для каждого неподдерживаемого ключевого слова редактор запросов отправляет в целевой объект сообщение «Команда <пропущенная_команда> не учитывается». Сценарий будет выполнен успешно, но неподдерживаемые команды не будут учитываться.
Внимание! |
---|
Так как команды SQLCMD запускаются не из командной строки, при запуске редактора запросов в режиме SQLCMD действуют некоторые ограничения. Нельзя передавать параметры командной строки, например переменные. Кроме того, поскольку редактор запросов не поддерживает возможности реагировать на приглашения операционной системы, не следует выполнять интерактивные инструкции. |
Выделение цветом в сценариях SQLCMD
В режиме сценариев SQLCMD программный код сценария выделяется разными цветами. Выделение цветом ключевых слов Transact-SQL остается таким же. Команды SQLCMD представлены с затененным фоном.
Пример
В следующем примере используется инструкция sqlcmd. Чтобы создать выходной файл с именем testoutput.txt, выполняются две инструкции Transact-SQL SELECT и одна команда операционной системы (вывод содержимого текущего каталога). Итоговый файл содержит информацию о результатах выполнения инструкции DIR, которая следует за результатами выполнения инструкций Transact-SQL.
:out C:\testoutput.txt
SELECT @@VERSION As 'Server Version'
!!DIR
!!:GO
SELECT @@SERVERNAME AS 'Server Name'
GO