Использование программы sqlcmd
Применимо к: SQL Server Azure SQL Database
Управляемый экземпляр SQL Azure
Azure Synapse Analytics
Analytics Platform System (PDW)
Служебная программа sqlcmd представляет собой программу командной строки для специализированного интерактивного выполнения инструкций и скриптов Transact-SQL, а также для автоматизации написания скриптов Transact-SQL. Для интерактивного использования sqlcmd и создания файлов скриптов, исполняемых с помощью sqlcmd, пользователь должен знать язык Transact-SQL. Программа sqlcmd обычно применяется следующим образом.
Пользователь вводит инструкции на языке Transact-SQL точно так же, как при работе в командной строке. Результаты выводятся в окно командной строки. Чтобы открыть окно командной строки, введите "cmd" в поле поиска Windows и выберите Командная строка для открытия. В окне командной строки введите 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
Подключение к экземпляру по умолчанию с использованием проверки подлинности 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 AdventureWorks2012.Person.Person"
Соединение с экземпляром по умолчанию на локальном компьютере с использованием проверки подлинности Windows, выполнение запроса, запись в файл выходных данных и выход из программы sqlcmd после завершения запроса:
sqlcmd -Q "SELECT * FROM AdventureWorks2012.Person.Person" -o MyOutput.txt
Подключение к именованному экземпляру с использованием проверки подлинности SQL Server для выполнения инструкций Transact-SQL в интерактивном режиме, с необходимостью ввода пароля в программе sqlcmd:
sqlcmd -U MyLogin -S <ComputerName>\<InstanceName>
Совет
Для просмотра полного перечня параметров, поддерживаемых служебной программой sqlcmd , введите
sqlcmd -?
.
Интерактивный запуск инструкций Transact-SQL с помощью программы sqlcmd
С помощью программы sqlcmd можно в интерактивном режиме выполнять инструкции TransactSQL из окна командной строки. Для интерактивного выполнения инструкций с помощью программы 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 помещается в буфер, называемый кэш инструкций. После ввода команды SQL Server и нажатия клавиши ВВОД эти инструкции отправляются на сервер GO . Чтобы выйти из 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 будет искать его в этой папке.
Для подключения к экземпляру sqlcmd по умолчанию на локальном компьютере введите SQL Server . Командная строка будет выглядеть следующим образом:
C:\>sqlcmd
1> _
Это означает, что вы подключились к экземпляру SQL Server и sqlcmd
теперь готовы принять инструкции и sqlcmd
команды Transact-SQL. Мерцающий знак подчеркивания после 1>
является приглашением sqlcmd
, отмечающим местоположение вводимых инструкций и команд. Теперь введите USE AdventureWorks2012 и нажмите клавишу ВВОД, а затем введите GO и снова нажмите клавишу ВВОД. Содержимое окна командной строки будет выглядеть следующим образом.
sqlcmd
USE AdventureWorks2012;
GO
Результирующий набор:
Changed database context to 'AdventureWorks2012'.
1> _
Нажмите клавишу ВВОД после ввода USE AdventureWorks2012
сигналов sqlcmd
, чтобы начать новую строку. После ввода GO,
сигнала sqlcmd
о том, что инструкция отправляется USE AdventureWorks2012
экземпляру SQL Server, нажмите клавишу ВВОД. sqlcmd
возвращает сообщение, указывающее, что инструкция USE
успешно завершена, и отображает новое приглашение 1>
, которое служит сигналом готовности к вводу новой
В следующем примере показано содержимое окна командной строки после ввода инструкции SELECT
, команды GO
для выполнения SELECT
и команды EXIT
для завершения программы sqlcmd
:
sqlcmd
USE AdventureWorks2012;
GO
SELECT TOP (3) BusinessEntityID, FirstName, LastName
FROM Person.Person;
GO
Результирующий набор:
BusinessEntityID FirstName LastName
----------- -------------------------------- -----------
1 Syed Abbas
2 Catherine Abel
3 Kim Abercrombie
(3 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, используя текстовый редактор, например Блокнот.
Примеры
A. Выполнение скрипта с помощью sqlcmd
Откройте Блокнот и введите следующие инструкции Transact-SQL:
USE AdventureWorks2012;
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 'AdventureWorks2012'.
BusinessEntityID FirstName LastName
---------------- ----------- -----------
1 Syed Abbas
2 Catherine Abel
3 Kim Abercrombie
(3 rows affected)
Б. Использование sqlcmd с выделенным административным подключением
В следующем примере программа sqlcmd
используется для подключения к серверу, на котором возникла проблема с блокировкой, с помощью выделенного административного соединения.
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
------ -------
62 64
(1 rows affected)
С помощью sqlcmd
завершите блокирующий процесс.
1> KILL 64;
2> GO
В. Использование sqlcmd для выполнения хранимой процедуры
В следующем примере представлено действие, выполняющее хранимую процедуру с помощью sqlcmd
. Создайте следующую хранимую процедуру.
USE AdventureWorks2012;
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 $(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 AdventureWorks2012
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)
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
Ж. Использование sqlcmd для настройки шифрования в базе данных Azure SQL
Программа sqlcmdможет работать на соединении с данными База данных SQL для определения шифрования и отношения доверия сертификата. Доступны два параметра **sqlcmd''':
Ключ -N используется клиентом для запроса зашифрованного соединения. Этот параметр аналогичен параметру ADO.net
ENCRYPT = true
.C помощью переключателя -C клиент настраивает неявное доверие к сертификату сервера без проверки. Этот параметр аналогичен параметру ADO.net
TRUSTSERVERCERTIFICATE = true
.
Служба База данных SQL не поддерживает все параметры, доступные 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 -C
Подключение с использованием учетных данных Windows, шифрование соединения и доверие сертификату сервера:
SQLCMD -E -N -C
Если поставщик установил значение ForceProtocolEncryption = True
, шифрование включается даже в случае, если в строке соединения указано значение Encrypt=No
.