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


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

Применимо: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure azure Synapse Analytics Analytics Platform 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. 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

Следующие шаги