Изменение скриптов 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 в списке Доступные базы данных выберите пункт База данных AdventureWorks2008R2.

  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

См. также

Справочник

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