Изменение скриптов SQLCMD при помощи редактора запросов
В редакторе запросов компонента Компонент Database Engine в среде Среда SQL Server Management Studio можно писать и изменять запросы в виде скриптов SQLCMD. Скрипты SQLCMD применяются в тех случаях, когда необходимо обработать системные команды Windows и инструкции Transact-SQL в одном и том же скрипте.
Режим SQLCMD
Чтобы при помощи редактора запросов компонента Компонент Database Engine писать и изменять скрипты SQLCMD, необходимо включить режим скриптов SQLCMD. По умолчанию режим скриптов SQLCMD в редакторе запросов отключен. Режим скриптов можно включить, нажав кнопку Режим SQLCMD на панели инструментов или выбрав пункт Режим SQLCMD в меню Запрос.
Примечание |
---|
При включении режима скриптов SQLCMD отключается функция IntelliSense и отладчик Transact-SQL в редакторе запросов компонента Компонент Database Engine. |
В скриптах SQLCMD в редакторе запросов можно использовать те же возможности, что и в любых других скриптах Transact-SQL. К таким средствам относятся:
выделение цветом;
выполнение скриптов;
система управления версиями;
синтаксический анализ скриптов;
Showplan
Включение режима скриптов SQLCMD в редакторе запросов
Включить режим скриптов SQLCMD для активного окна редактора запросов компонента Компонент Database Engine можно при помощи следующей процедуры.
Переключение окна редактора запросов компонента Database Engine в режим скриптов SQLCMD
В обозревателе объектов щелкните сервер правой кнопкой мыши и выберите команду Создать запрос, чтобы открыть новое окно редактора запросов компонента Компонент Database Engine.
В меню Запрос выберите команду Режим 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 может использоваться без вводной части или предваряться «!!:»;
Редактор запросов компонента Компонент Database Engine поддерживает переменные среды и переменные, определенные в скрипте SQLCMD, однако не поддерживает встроенные переменные SQLCMD и переменные osql. Обрабатываемый код SQLCMD среды Среда SQL Server Management Studio принимает переменные с учетом регистра. Например, PRINT '$(COMPUTERNAME)' выдаст правильный результат, а PRINT '$(ComputerName)' приведет к ошибке.
Внимание! |
---|
В среде Среда SQL Server Management Studio для выполнения в обычном режиме и режиме SQLCMD используется Microsoft .NET Framework SqlClient. При вызове из командной строки SQLCMD использует поставщика OLE DB. Так как могут применяться различные параметры по умолчанию, выполнение одного и того же запроса в среде Среда SQL Server Management Studio в режиме SQLCMD и в программе SQLCMD может проходить по-разному. |
Поддерживаемый синтаксис SQLCMD
Редактор запросов компонента Компонент Database Engine поддерживает следующие ключевые слова скриптов 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, для каждого неподдерживаемого ключевого слова редактор запросов отправляет в целевой объект сообщение «Команда <ignored command> не учитывается». Скрипт будет выполнен успешно, но неподдерживаемые команды не будут учитываться.
Внимание! |
---|
Так как команды 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