Поделиться через


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

Используйте редактор запросов в SQL Server Management Studio (SSMS) для записи и редактирования запросов в виде скриптов SQLCMD. Скрипты SQLCMD можно использовать для обработки системных команд Windows и Transact-SQL инструкций в том же скрипте.

Включение режима SQLCMD

Чтобы использовать редактор запросов для записи или редактирования скриптов SQLCMD, необходимо включить режим скриптов SQLCMD. Режим SQLCMD по умолчанию не включен. Вы можете включить режим сценариев, выбрав значок режима SQLCMD на панели инструментов или выбрав режим SQLCMD в меню "Запрос ".

Замечание

При включении режима SQLCMD IntelliSense и отладчика Transact-SQL отключены в редакторе запросов.

Скрипты SQLCMD в редакторе запросов могут использовать те же функции, что и все Transact-SQL скрипты. К этим функциям относятся:

  • цветовое кодирование,
  • Выполнение скриптов
  • Управление исходным кодом
  • Анализ скриптов
  • План показа

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

Чтобы включить скрипты SQLCMD для активного окна редактора запросов, используйте следующую процедуру.

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

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

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

    Инструкции SQLCMD выполняются в контексте редактора запросов.

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

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

    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 row(s) affected)
    • <The directory information>
    • (4 row(s) affected)

Это важно

При запуске 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 может использоваться без предварительного слова или с предшествующей командой !!:.

  • Редактор запросов поддерживает переменные среды и переменные, которые определяются как часть скрипта SQLCMD, но не поддерживает встроенные переменные SQLCMD или osql . SSMS обрабатывает переменные SQLCMD как конфиденциальные регистры. Например, PRINT '$(COMPUTERNAME)' выдает правильный результат, но PRINT '$(ComputerName)' возвращает ошибку.

Caution

SSMS использует библиотеку SqlClient .NET для выполнения в обычном и SQLCMD режиме. При выполнении запроса из командной строки, sqlcmd использует поставщик OLE DB. Так как различные параметры по умолчанию могут применяться, при выполнении одного и того же запроса в режиме SQLCMD в SSMS по сравнению с режимом SQLCMD в служебной программе sqlcmd может отображаться другое поведение.

Поддерживаемый синтаксис SQLCMD

Редактор запросов поддерживает следующие ключевые слова скрипта SQLCMD:

  • [!!:]GO[count]
  • !! <command>
  • :exit(statement)
  • :Quit
  • :r <filename>
  • :setvar <var> <value>
  • :connect server[\instance] [-l login_timeout] [-U user [-P password]] 1
  • :on error [ignore|exit]
  • :error <filename>|stderr|stdout 2
  • :out <filename>|stderr|stdout 2

1 Дополнительные сведения о команде см. в разделе "Команды" :connectв служебной программе sqlcmd.

2 Редактор запросов отправляет выходные данные на вкладку "Сообщения"stderr и stdout.

Редактор запросов не поддерживает команды SQLCMD, которые не включены в предыдущий список. При выполнении скрипта, содержащего неподдерживаемые ключевые слова SQLCMD, редактор запросов игнорирует команду. Для каждого неподдерживаемого ключевого слова редактор запросов отправляет следующее сообщение в место назначения:

Ignoring command <ignored_command>

Caution

Так как вы не запускаете 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