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

Применимо к:SQL ServerAzure SQL DatabaseAzure Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)

С помощью редактора запросов ядра СУБД в SQL Server Management Studio можно создавать и изменять запросы в виде скриптов SQLCMD. При обработке команд системы Windows и инструкций Transact-SQL в том же скрипте используются скрипты SQLCMD.

Режим SQLCMD

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

Заметка

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

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

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

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

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

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

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

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

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

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

  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)
    • <Сведения о каталоге>
    • (Обработано строк: 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 может использоваться без предисловия или предшествует !!:

  • Редактор запросов ядра СУБД поддерживает переменные среды и переменные, определенные как часть скрипта 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

Редактор запросов ядра СУБД поддерживает следующие ключевые слова скрипта 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. stderrstdout

Команды 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

Далее