Изменение сценариев 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

  1. В обозревателе объектов щелкните сервер правой кнопкой мыши и выберите команду Создать запрос, чтобы открыть новое окно редактора запросов компонента Database Engine.

  2. В меню Запрос выберите команду Режим SQLCMD.

    Редактор запросов выполняет инструкции sqlcmd в контексте редактора запросов.

  3. На панели инструментов Редактор SQL в списке Доступные базы данных выберите пункт AdventureWorks.

  4. В окне редактора запросов введите следующие две инструкции Transact-SQL и инструкцию !!DIRsqlcmd:

    SELECT DISTINCT Type FROM Sales.SpecialOffer;
    GO
    !!DIR
    GO
    SELECT ProductCategoryID, Name FROM Production.ProductCategory;
    GO
    
  5. Нажмите клавишу F5, чтобы выполнить весь раздел, составленный из инструкций Transact-SQL и MS-DOS.

    Обратите внимание на две области с результатами выполнения первой и третьей инструкций SQL.

  6. В области Результаты перейдите на вкладку Сообщения, чтобы просмотреть сообщения всех трех инструкций.

    • (Обработано строк: 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

См. также

Справочник

Основные понятия