Изменение скриптов SQLCMD при помощи редактора запросов

Используя редактор запросов Компонент Database Engine в SQL Server Management Studio, можно писать и редактировать запросы в виде скриптов SQLCMD. Скрипты SQLCMD применяются в тех случаях, когда необходимо обработать системные команды Windows и инструкции Transact-SQL в одном и том же скрипте.

Режим SQLCMD

Чтобы при помощи редактора запросов компонента Компонент Database Engine писать и изменять скрипты SQLCMD, необходимо включить режим скриптов SQLCMD. По умолчанию режим скриптов SQLCMD в редакторе запросов отключен. Режим скриптов можно включить, нажав кнопку Режим SQLCMD на панели инструментов или выбрав пункт Режим SQLCMD в меню Запрос .

Примечание

При включении режима SQLCMD отключается функция IntelliSense и отладчик Transact-SQL в редакторе запросов ядра СУБД.

В скриптах SQLCMD в редакторе запросов можно использовать все те же возможности, что и в любых других скриптах Transact-SQL. К таким средствам относятся:

  • выделение цветом;

  • выполнение скриптов;

  • Система управления версиями

  • синтаксический анализ скриптов;

  • Showplan

Включение режима скриптов SQLCMD в редакторе запросов

Включить режим скриптов SQLCMD для активного окна редактора запросов компонента Компонент Database Engine можно при помощи следующей процедуры.

Переключение окна редактора запросов компонента Database Engine в режим скриптов SQLCMD

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

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

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

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

  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 использует Microsoft.NET FrameworkSqlClient для выполнения в обычном режиме и в режиме SQLCMD. При вызове из командной строки 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  

См. также:

Программа sqlcmd