Изменение скриптов SQLCMD при помощи редактора запросов
Применимо к:SQL Server
База данных Azure SQL
Управляемый экземпляр Azure SQL
Аналитика Azure Synapse
Аналитическая платформа (PDW)
С помощью редактора запросов в ядре СУБД в SQL Server Management Studio можно создавать и изменять запросы в виде скриптов SQLCMD. При обработке команд системы Windows и инструкций Transact-SQL в том же скрипте используются скрипты SQLCMD.
Режим SQLCMD
Чтобы использовать редактор запросов для ядра СУБД, записывая или редактируя скрипты SQLCMD, следует включить режим скриптования SQLCMD. По умолчанию режим SQLCMD не разрешен в Редактор запросов. Вы можете включить режим сценариев, выбрав значок режима SQLCMD на панели инструментов или выбрав режим SQLCMD в меню "Запрос ".
Примечание.
При включении режима SQLCMD отключается функция IntelliSense и отладчик Transact-SQL в редакторе запросов ядра СУБД.
В скриптах SQLCMD в редакторе запросов можно использовать все те же возможности, что и в любых других скриптах Transact-SQL. К таким особенностям относятся:
- цветовое кодирование,
- Выполнение скриптов
- Управление исходным кодом
- Анализ скриптов
- План показа
Включение скриптов SQLCMD в Редактор запросов
Чтобы включить скрипты SQLCMD для активного окна Редактора запросов Модуля базы данных, используйте следующую процедуру.
Переключение окна редактора запросов ядра СУБД в режим SQLCMD
В обозревателе объектов щелкните правой кнопкой мыши на сервере и выберите Новый запрос, чтобы открыть новое окно редактора запросов для ядра базы данных.
В меню "Запрос" выберите режим SQLCMD.
Редактор запросов выполняет инструкции SQLCMD в своей среде.
На панели инструментов Редактора SQL в списке Доступные базы данных выберите пункт
AdventureWorks2022
.В окне Редактор запросов введите следующие инструкции Transact-SQL и инструкцию
!!DIR
SQLCMD:SELECT DISTINCT Type FROM Sales.SpecialOffer; GO !!DIR GO SELECT ProductCategoryID, Name FROM Production.ProductCategory; GO
Нажмите клавишу F5, чтобы выполнить смешанные инструкции Transact-SQL и MS-DOS.
Обратите внимание на две панели с результатами выполнения первой и третьей инструкций SQL.
В области Результаты выберите вкладку Сообщения, чтобы просмотреть сообщения всех трех инструкций:
- (Затронуто 6 строк)
- <Сведения о каталоге>
- (Обработано строк: 4)
Внимание
При выполнении из командной строки служебная программа 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