Использование программы sqlcmd
Программа 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 AdventureWorks2008R2.Person.Person"
Подключение к экземпляру по умолчанию на локальном компьютере с использованием проверки подлинности Windows, выполнение запроса, запись в файл выходных данных и выход из программы sqlcmd после завершения запроса:
sqlcmd -Q "SELECT * FROM AdventureWorks2008R2.Person.Person" -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, чтобы запустить измененную инструкцию Transact-SQL.
Строки в кавычках
Символы, заключенные в кавычки, используются без какой-либо предварительной обработки, за исключением кавычек, которые вставляются в строку путем ввода двух последовательных кавычек.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 AdventureWorks2008R2 и нажмите клавишу ВВОД, а затем введите GO и снова нажмите клавишу ВВОД. Содержимое окна командной строки будет выглядеть следующим образом.
sqlcmd
USE AdventureWorks2008R2;
GO
Ниже приводится результирующий набор.
Changed database context to 'AdventureWorks2008R2'.
1> _
После ввода команды USE AdventureWorks2008R2 и нажатия клавиши ВВОД программа sqlcmd получила команду начать новую строку. После ввода GO, и нажатия клавиши ВВОД программа sqlcmd получила команду отправить инструкцию USE AdventureWorks2008R2 экземпляру SQL Server. Затем sqlcmd возвратила сообщение, указывающее, что инструкция USE завершилась успешно и программа вывела новое приглашение 1>, которое служит сигналом готовности к вводу новой инструкции или команды.
В следующем примере показано содержимое командной строки после ввода инструкции SELECT, команды GO для выполнения инструкции SELECT и команды EXIT для завершения программы sqlcmd.
sqlcmd
USE AdventureWorks2008R2;
GO
SELECT TOP (3) BusinessEntityID, FirstName, LastName
FROM Person.Person;
GO
Ниже приводится результирующий набор.
BusinessEntityID FirstName LastName
----------- -------------------------------- -----------
1 Syed Abbas
2 Catherine Abel
3 Kim Abercrombie
(Обработано строк: 3)
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 AdventureWorks2008R2;
GO
SELECT TOP (3) BusinessEntityID, FirstName, LastName
FROM Person.Person;
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 'AdventureWorks2008R2'.
BusinessEntityID FirstName LastName
---------------- ----------- -----------
1 Syed Abbas
2 Catherine Abel
3 Kim Abercrombie
(Обработано строк: 3)
Б. Использование программы sqlcmd с выделенным административным соединением
В следующем примере программа sqlcmd используется для подключения к серверу, на котором возникла проблема с блокировкой, с помощью выделенного административного соединения.
C:\>sqlcmd -S ServerName -A
1> SELECT blocked FROM sys.dm_exec_requests WHERE blocked <> 0;
2> GO
Ниже приводится результирующий набор.
spid blocked
------ -------
62 64
(Обработано строк: 1)
С помощью sqlcmd завершите блокирующий процесс.
1> KILL 64;
2> GO
В. Использование программы sqlcmd для выполнения хранимых процедур
В следующем примере представлено действие, выполняющее хранимую процедуру с помощью sqlcmd. Создайте следующую хранимую процедуру.
USE AdventureWorks2008R2;
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.Person
WHERE FirstName = @FirstName
AND LastName = @LastName;
SET NOCOUNT OFF
После приглашения sqlcmd введите следующее.
C:\sqlcmd
1> :Setvar FirstName Gustavo
1> :Setvar LastName Achong
1> EXEC dbo.ContactEmailAddress $(Gustavo),$(Achong)
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 AdventureWorks2008R2
1> :XML ON
1> SELECT TOP 3 FirstName + ' ' + LastName + ', '
2> FROM Person.Person
3> GO
Syed Abbas, Catherine Abel, Kim Abercrombie,
Е. Использование программы 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
G. Использование программы sqlcmd для включения шифрования в базе данных Microsoft SQL Azure
Программа sqlcmdможет быть запущена при подключении к данным SQL Azure для определения шифрования и отношения доверия сертификата. У программы sqlcmdимеется два параметра.
Ключ -N используется клиентом для запроса зашифрованного соединения. Этот параметр аналогичен параметру ADO.net ENCRYPT = true.
C помощью ключа -C клиент настраивает неявное доверие к сертификату сервера без проверки. Этот параметр аналогичен параметру ADO.net TRUSTSERVERCERTIFICATE = true.
Служба SQL Azure не поддерживает все параметры SET, которые доступны в экземпляре SQL Server. Следующие параметры вызывают ошибку, если соответствующий параметр SET имеет значение ON или OFF:
SET ANSI_DEFAULTS
SET ANSI_NULLS
SET REMOTE_PROC_TRANSACTIONS
SET ANSI_NULL_DEFAULT
Следующие параметры SET не вызывают исключений, но использовать их нельзя. Они являются устаревшими.
SET CONCAT_NULL_YIELDS_NULL
SET ANSI_PADDING
SET QUERY_GOVERNOR_COST_LIMIT
Синтаксис
Следующий пример относится к случаям, когда поставщик для собственного клиента SQL Server имеет следующие параметры: ForceProtocolEncryption = False, Trust Server Certificate = No
Подключение с использованием учетных данных Windows и шифрование соединения:
SQLCMD –E –N
Подключение с использованием учетных данных Windows и доверие сертификату сервера:
SQLCMD –E –C
Подключение с использованием учетных данных Windows, шифрование соединения и доверие сертификату сервера:
SQLCMD –E –N –C
Следующий пример относится к случаям, когда поставщик для собственного клиента SQL Server имеет следующие параметры: ForceProtocolEncryption = True, TrustServerCertificate = Yes.
Подключение с использованием учетных данных Windows, шифрование соединения и доверие сертификату сервера:
SQLCMD –E
Подключение с использованием учетных данных Windows, шифрование соединения и доверие сертификату сервера:
SQLCMD –E –N
Подключение с использованием учетных данных Windows, шифрование соединения и доверие сертификату сервера:
SQLCMD –E –T
Подключение с использованием учетных данных Windows, шифрование соединения и доверие сертификату сервера:
SQLCMD –E –N –C
Если поставщик установил значение ForceProtocolEncryption = True, шифрование включается даже в случае, если в строке соединения указано значение Encrypt=No.