Изменение скриптов SQLCMD при помощи редактора запросов
С помощью ядро СУБД Редактор запросов в СРЕДЕ SQL Server Management Studio можно создавать и изменять запросы в виде скриптов SQLCMD. Скрипты SQLCMD применяются в тех случаях, когда необходимо обработать системные команды Windows и инструкции Transact-SQL в одном и том же скрипте.
Режим SQLCMD
Чтобы использовать ядро СУБД Редактор запросов для записи или редактирования скриптов SQLCMD, необходимо включить режим скриптов SQLCMD. По умолчанию режим скриптов SQLCMD в редакторе запросов отключен. Режим скриптов можно включить, нажав кнопку Режим SQLCMD на панели инструментов или выбрав пункт Режим SQLCMD в меню Запрос .
Примечание.
При включении режима SQLCMD отключается функция IntelliSense и отладчик Transact-SQL в редакторе запросов ядра СУБД.
В скриптах SQLCMD в редакторе запросов можно использовать все те же возможности, что и в любых других скриптах Transact-SQL. К таким средствам относятся:
выделение цветом;
выполнение скриптов;
Система управления версиями
синтаксический анализ скриптов;
Showplan
Включение режима скриптов SQLCMD в редакторе запросов
Чтобы включить скрипты SQLCMD для активного ядро СУБД Редактор запросов окна, выполните следующую процедуру.
Переключение окна редактора запросов компонента Database Engine в режим скриптов SQLCMD
В обозреватель объектов щелкните сервер правой кнопкой мыши и выберите команду "Создать запрос", чтобы открыть новое окно ядро СУБД Редактор запросов.
В меню Запрос выберите команду Режим SQLCMD.
Редактор запросов выполняет инструкции sqlcmd в контексте редактора запросов.
На панели инструментов Редактор SQL в списке Доступные базы данных выберите пункт AdventureWorks2012.
В окне Редактор запросов введите следующие две инструкции 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.
Включение режима скриптов 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 Framework SqlClient для выполнения в обычном режиме и в режиме 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