Использование программы sqlcmd
Изменения: 17 июля 2006 г.
Программа sqlcmd — это программа командной строки Microsoft Win32 для нерегламентированного интерактивного выполнения инструкций и сценариев Transact-SQL и для автоматизации задач сценариев Transact-SQL. Интерактивная работа с sqlcmd и создание файлов сценариев, исполняемых при помощи sqlcmd, требует от пользователя понимания языка Transact-SQL. Программа sqlcmd обычно применяется следующим образом.
- Пользователь в интерактивном режиме вводит инструкции на языке Transact-SQL так же, как и при работе в командной строке. Результаты выводятся в окно командной строки. Чтобы открыть окно командной строки, в меню Пуск последовательно выберите команды Все программы, Стандартные и Командная строка. В окне командной строки введите sqlcmd, а затем необходимые параметры. Полный перечень параметров, поддерживаемых программой sqlcmd, см. в разделе Программа sqlcmd.
- Пользователь отправляет на выполнение задание sqlcmd, либо вводя для выполнения одиночную инструкцию на языке Transact-SQL, либо указав текстовый файл, который содержит выполняемые инструкции Transact-SQL. Вывод обычно перенаправляется в текстовый файл, но может также быть выведен в окно командной строки.
- Режим SQLCMD в редакторе запросов среды SQL Server Management Studio.
- Управляющие объекты SQL Server (SMO).
- Задания CmdExec агента SQL Server.
Часто используемые параметры sqlcmd
Чаще всего используются следующие параметры.
- Серверный параметр (-S) задает экземпляр Microsoft SQL Server, к которому подключается программа sqlcmd.
- Параметры проверки подлинности (-E, -U и -P), которые задают учетные данные, используемые программой sqlcmd для подключения к экземпляру SQL Server.
Примечание. Параметр -E используется по умолчанию, и нет необходимости его указывать. - Параметры входа (-Q, -q и -i), которые задают расположение входных данных для программы sqlcmd.
- Параметр выходных данных (-o), который задает файл, куда программа sqlcmd помещает выходные данные.
Подключение к программе sqlcmd
Ниже перечислены наиболее частые способы использования программы sqlcmd.
Подключение к экземпляру по умолчанию с использованием проверки подлинности Windows для запуска инструкций Transact-SQL в интерактивном режиме:
sqlcmd -S <ComputerName>
Примечание. В примере выше ключ -E не указан, так как он является ключом по умолчанию и программа sqlcmd подключается к экземпляру по умолчанию, используя проверку подлинности Windows. Подключение к именованному экземпляру с использованием проверки подлинности Windows для запуска инструкций Transact-SQL в интерактивном режиме:
sqlcmd -S <ComputerName>\<InstanceName>
или
sqlcmd -S .\<InstanceName>
Подключение к именованному экземпляру с использованием проверки подлинности Windows и указанием входного и выходного файла:
sqlcmd -S <ComputerName>\<InstanceName> -i <MyScript.sql> -o <MyOutput.rpt>
Подключение к экземпляру по умолчанию на локальном компьютере с использованием проверки подлинности Windows, выполнение запроса и продолжение выполнения программы sqlcmd после завершения запроса:
sqlcmd -q "SELECT * FROM AdventureWorks.Person.Contact"
Подключение к экземпляру по умолчанию на локальном компьютере с использованием проверки подлинности Windows, выполнение запроса, запись в файл выходных данных и выход из программы sqlcmd после завершения запроса:
sqlcmd -Q "SELECT * FROM AdventureWorks.Person.Contact" -o MyOutput.txt
Подключение к именованному экземпляру с использованием проверки подлинности SQL Server для выполнения инструкций языка Transact-SQL в интерактивном режиме; программа sqlcmd ожидает ввода пароля:
sqlcmd -U MyLogin -S <ComputerName>\<InstanceName>
Примечание. Чтобы просмотреть полный перечень параметров, поддерживаемых программой sqlcmd, введите: sqlcmd -?
.
Интерактивный запуск инструкций Transact-SQL с помощью программы sqlcmd
С помощью программы sqlcmd можно интерактивно запускать инструкции Transact-SQL из окна командной строки. Для интерактивного выполнения инструкций Transact-SQL с помощью программы sqlcmd запустите эту программу без переключателей -Q, -q, -Z и -i, задающих входные файлы или запросы. Например:
sqlcmd -S <ComputerName>\<InstanceName>
Если программа sqlcmd выполняется без входных файлов или запросов, то она подключается к заданному экземпляру SQL Server и выводит новую строку с символами 1>
и мигающим знаком подчеркивания, которая называется приглашением sqlcmd. Цифра 1
означает, что это первая строка инструкции Transact-SQL и что приглашение sqlcmd является точкой, с которой начинается инструкция Transact-SQL.
В приглашении sqlcmd можно вводить как инструкции Transact-SQL, так и команды sqlcmd, например GO и EXIT. Каждая инструкция Transact-SQL помещается в буфер, называемый кэш инструкций. После ввода команды GO и нажатия клавиши ВВОД эти инструкции отправляются SQL Server. Для завершения программы sqlcmd введите EXIT или QUIT в начале новой строки.
Чтобы очистить кэш инструкций, введите :RESET. Ввод команды ^C приводит к выходу из программы sqlcmd. Кроме того, с помощью команды ^C можно останавливать выполнение кэша инструкций после запуска команды GO.
Инструкции Transact-SQL, введенные во время интерактивного сеанса, можно изменить, введя команду :ED и приглашение sqlcmd. Откроется редактор, и после изменения инструкции Transact-SQL и закрытия редактора измененная инструкция Transact-SQL появится в окне командной строки. Введите GO, чтобы запустить измененную инструкцию .
Строки в кавычках
Символы, заключенные в кавычки, используются без какой-либо предварительной обработки, за исключением кавычек, которые вставляются в строку путем ввода двух последовательных кавычек.SQL Server рассматривает такую последовательность символов как одни кавычки, однако на сервере выполняется преобразование. Переменные сценариев при появлении в строке не раскрываются.
Например:
sqlcmd
PRINT "Length: 5"" 7'"
GO
Ниже приводится результирующий набор.
Length: 5" 7'
Многострочные символьные строки
Программа sqlcmd поддерживает сценарии, в которых одна символьная строка занимает несколько строк. Например, следующая инструкция SELECT
занимает несколько строк, но является одной символьной строкой, которая выполняется после ввода команды GO
и нажатия клавиши ВВОД.
SELECT First line
FROM Second line
WHERE Third line
GO
Пример интерактивной команды sqlcmd
Ниже приведен пример интерактивного выполнения программы sqlcmd.
При открытии окна командной строки там отображается только одна строка:
C:\> _
Это означает, что текущей папкой является C:\
, и если задать имя файла, то ОС Windows будет искать его в этой папке.
Для подключения к экземпляру SQL Server по умолчанию на локальном компьютере введите sqlcmd. Командная строка будет выглядеть следующим образом:
C:\>sqlcmd
1> _
Это означает, что вы подключились к экземпляру SQL Server и что программа sqlcmd
готова обрабатывать инструкции Transact-SQL и команды sqlcmd
. Мигающий знак подчеркивания после 1>
является приглашением sqlcmd
, которое отмечает местоположение вводимых инструкций и команд. Теперь введите USE AdventureWorks и нажмите клавишу ВВОД, а затем введите GO и снова нажмите клавишу ВВОД. Содержимое окна командной строки будет выглядеть следующим образом.
sqlcmd
USE AdventureWorks;
GO
Ниже приводится результирующий набор.
Changed database context to 'AdventureWorks'.
1> _
После ввода команды USE AdventureWorks
и нажатия клавиши ВВОД программа sqlcmd
получила команду начать новую строку. После ввода GO,
и нажатия клавиши ВВОД программа sqlcmd
получила команду отправить инструкцию USE AdventureWorks
экземпляру SQL Server. Затем sqlcmd
возвратила сообщение, указывающее, что инструкция USE
завершилась успешно и программа вывела новое приглашение 1>
, которое служит сигналом готовности к вводу новой инструкции или команды.
В следующем примере показано содержимое командной строки после ввода инструкции SELECT
, команды GO
для выполнения SELECT
и команды EXIT
для завершения программы sqlcmd
:
sqlcmd
USE AdventureWorks;
GO
SELECT TOP (5) ContactID, FirstName, LastName
FROM Person.Contact;
GO
Ниже приводится результирующий набор.
ContactID FirstName LastName
----------- -------------------------------------------------- -----------
1 Syed Abbas
2 Catherine Abel
3 Kim Abercrombie
4 Humberto Acevedo
5 Pilar Ackerman
(5 rows affected)
1> EXIT
C:\>
Строки после 3> GO
— это выходные данные инструкции SELECT
. Когда выходные данные сформированы, программа sqlcmd
сбрасывает приглашение sqlcmd
и отображает 1>
. После ввода команды EXIT
в строке 1>
командная строка приобретает первоначальный вид. Это означает завершение сеанса sqlcmd
. Теперь можно закрыть окно командной строки. Для этого введите еще одну команду EXIT
.
Выполнение файлов сценария Transact-SQL с использованием программы sqlcmd
Можно использовать команду sqlcmd для выполнения файлов сценариев базы данных. Файлы сценариев — это текстовые файлы, содержащие инструкции Transact-SQL, команды sqlcmd и переменные сценариев. Дополнительные сведения о переменных сценария см. в разделе Использование программы sqlcmd с переменными сценария. Программа sqlcmd работает с инструкциями, командами и переменными сценария, помещенными в файл сценария, подобно тому, как она работает с инструкциями и командами, вводимыми в интерактивном режиме. Главное отличие заключается в том, что программа sqlcmd без остановок считывает входной файл, а не ждет, пока пользователь введет инструкции, команды или переменные сценария.
Существуют различные способы создания файлов сценария базы данных:
- можно в интерактивном режиме создать и отладить набор инструкций Transact-SQL в среде SQL Server Management Studio и сохранить содержимое окна запроса в файл сценария;
- можно создать текстовый файл инструкций Transact-SQL, используя текстовый редактор, например «Блокнот».
Примеры
А. Запуск сценария с помощью программы sqlcmd
Откройте «Блокнот» и введите следующие инструкции Transact-SQL:
USE AdventureWorks;
GO
SELECT TOP (5) ContactID, FirstName, LastName
FROM Person.Contact;
GO
Создайте папку с именем MyFolder
и сохраните сценарий в виде файла MyScript.sql
в папке C:\MyFolder
. Введите следующий текст в командной строке, чтобы запустить сценарий, и поместите выходные данные MyOutput.txt
в папку MyFolder
:
sqlcmd -i C:\MyFolder\MyScript.sql -o C:\MyFolder\MyOutput.txt
Файл MyOutput.txt
, просматриваемый в «Блокноте», содержит следующие сведения:
Changed database context to 'AdventureWorks'.
ContactID FirstName LastName
----------- ----------- -----------
1 Syed Abbas
2 Catherine Abel
3 Kim Abercrombie
4 Humberto Acevedo
5 Pilar Ackerman
(5 rows affected)
Б. Использование программы sqlcmd с выделенным административным соединением
В следующем примере программа sqlcmd
используется для подключения к серверу, на котором возникла проблема с блокировкой, с помощью выделенного административного соединения (dedicated administrative connection, DAC).
C:\>sqlcmd -S ServerName -A
1> SELECT session_id, blocking_session_id FROM sys.dm_exec_requests
WHERE blocking_session_id <> 0;
2> GO
Ниже приводится результирующий набор.
session_id blocking_session_id
---------- -------------------
51 54
(1 rows affected)
С помощью sqlcmd
завершите блокирующий процесс.
1> KILL 54;
2> GO
В. Использование sqlcmd для выполнения хранимых процедур
В следующем примере представлено действие, выполняющее хранимую процедуру с помощью sqlcmd
. Создайте следующую хранимую процедуру.
USE AdventureWorks;
IF OBJECT_ID ( 'dbo.ContactEmailAddress',`` 'P' ) IS NOT NULL
DROP PROCEDURE dbo.ContactEmailAddress;
GO
CREATE PROCEDURE dbo.ContactEmailAddress
(
@FirstName nvarchar(50)
,@LastName nvarchar(50)
)
AS
SET NOCOUNT ON
SELECT EmailAddress
FROM Person.Contact
WHERE FirstName = @FirstName
AND LastName = @LastName;
SET NOCOUNT OFF
После приглашения sqlcmd
введите следующее:
C:\sqlcmd
1> USE AdventureWorks;
2> GO
1> :Setvar FirstName Gustavo
1> :Setvar LastName Achong
1> EXEC dbo.ContactEmailAddress $(FirstName),$(LastName);
2> GO
EmailAddress
-----------------------------
gustavo0@adventure-works.com
Г. Использование программы sqlcmd для обслуживания баз данных
В следующем примере кода показано, как использовать программу sqlcmd
для задач обслуживания базы данных. Создайте C:\BackupTemplate.sql
со следующим кодом.
USE master;
BACKUP DATABASE [$(db)] TO DISK='$(bakfile)';
После приглашения sqlcmd
введите следующее:
C:\ >sqlcmd
1> :connect <server>
Sqlcmd: Successfully connected to server <server>.
1> :setvar db msdb
1> :setvar bakfile c:\msdb.bak
1> :r c:\BackupTemplate.sql
2> GO
Changed database context to 'master'.
Processed 688 pages for database 'msdb', file 'MSDBData' on file 2.
Processed 5 pages for database 'msdb', file 'MSDBLog' on file 2.
BACKUP DATABASE successfully processed 693 pages in 0.725 seconds (7.830 MB/sec)
Д. Использование sqlcmd для выполнения кода на нескольких экземплярах
Следующий код представляет собой сценарий для соединения двух экземпляров. Обратите внимание на команду GO
перед подключением ко второму экземпляру.
:CONNECT <server>\,<instance1>
EXEC dbo.SomeProcedure
GO
:CONNECT <server>\,<instance2>
EXEC dbo.SomeProcedure
GO
Е. Возвращение выходных данных XML
Следующий пример показывает, как выходные данные XML возвращаются неформатированными, в виде непрерывного потока.
C:\>sqlcmd -d AdventureWorks
1> :XML ON
1> SELECT TOP 4 FirstName + ' ' + LastName + ', '
2> FROM Person.Contact
3> GO
Gustavo Achong, Catherine Abel, Kim Abercrombie, Humberto Acevedo,
Ж. Использование sqlcmd в файлах сценариев Windows
Команда sqlcmd
, например sqlcmd -i C:\InputFile.txt -o C:\OutputFile.txt,
, может выполняться в файле BAT вместе со сценарием VBScript. В этом случае не используйте интерактивные параметры. Программа sqlcmd должна быть установлена на компьютере, на котором выполняется файл BAT.
Сначала создайте следующие четыре файла.
C:\badscript.sql
SELECT batch_1_this_is_an_error GO SELECT 'batch #2' GO
C:\goodscript.sql
SELECT 'batch #1' GO SELECT 'batch #2' GO
C:\returnvalue.sql
:exit(select 100) @echo off
C:\windowsscript.bat
@echo off echo Running badscript.sql sqlcmd -i badscript.sql -b -o out.log if not errorlevel 1 goto next1 echo == An error occurred :next1 echo Running goodscript.sql sqlcmd -i goodscript.sql -b -o out.log if not errorlevel 1 goto next2 echo == An error occurred :next2 echo Running returnvalue.sql sqlcmd -i returnvalue.sql -o out.log echo SQLCMD returned %errorlevel% to the command shell :exit
Затем из командной строки запустите C:\windowsscript.bat
:
C:\>windowsscript.bat
Running badscript.sql
== An error occurred
Running goodscript.sql
Running returnvalue.sql
SQLCMD returned 100 to the command shell
Журнал изменений
Версия | Журнал |
---|---|
17 июля 2006 г. |
|
См. также
Задачи
Как создать шаг задания CmdExec (среда SQL Server Management Studio)
Основные понятия
Использование программы sqlcmd с переменными сценария
Создание шагов задания
Другие ресурсы
Программа sqlcmd
Редактирование сценариев SQLCMD при помощи редактора запросов
Учебник по программе SQLCMD