Использование sqlcmd
Применимо: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure базе данных SQL Azure Synapse Analytics Analytics Platform System (PDW) в Microsoft Fabric
sqlcmd — это служебная программа командной строки для нерегламентированного интерактивного выполнения инструкций и сценариев Transact-SQL (T-SQL) и автоматизации задач сценариев T-SQL. Чтобы использовать sqlcmd в интерактивном режиме или создавать файлы скриптов для sqlcmd, следует понимать T-SQL. Sqlcmd можно использовать различными способами. Например:
Введите инструкции T-SQL из командной строки. Консоль возвращает результаты. Чтобы открыть окно командной строки, введите
cmd
в поле поиска Windows и выберите командную строку , чтобы открыть ее. В окне командной строки введитеsqlcmd
и необходимые параметры. Полный список параметров, поддерживаемых sqlcmd, см. в служебной программе sqlcmd.Отправьте задание sqlcmd либо путем указания одной инструкции T-SQL для выполнения, либо путем указания служебной программы в текстовый файл, содержащий инструкции T-SQL для выполнения. Выходные данные направляются в текстовый файл, но также могут отображаться в командной строке.
Режим SQLCMD в среде SQL Server Management Studio (SSMS) Редактор запросов.
Объекты управления SQL Server (SMO).
Задания CmdExec агента SQL Server.
Распространенные параметры sqlcmd
Параметр сервера (
-S
) определяет экземпляр SQL Server, к которому подключается sqlcmd .Параметры проверки подлинности (
-E
и-P
-U
) указывают учетные данные, которые sqlcmd использует для подключения к экземпляру SQL Server.Примечание.
-E
Параметр является значением по умолчанию и не требуется указывать.Параметры ввода (
-Q
,-q
и-i
) определяют расположение входных данных в sqlcmd.Параметр вывода (
-o
) указывает файл, в котором sqlcmd — поместить выходные данные.
Подключение к программе sqlcmd
Подключитесь к экземпляру по умолчанию с помощью проверки подлинности Windows для интерактивного выполнения инструкций T-SQL:
sqlcmd -S <ComputerName>
Примечание.
В предыдущем примере не указано,
-E
так как это значение по умолчанию и sqlcmd подключается к экземпляру по умолчанию с помощью проверки подлинности Windows.Подключитесь к именованном экземпляру с помощью проверки подлинности Windows для интерактивного запуска инструкций T-SQL:
sqlcmd -S <ComputerName>\<InstanceName>
or
sqlcmd -S .\<InstanceName>
Подключитесь к именованному экземпляру с помощью проверки подлинности Windows и укажите входные и выходные файлы:
sqlcmd -S <ComputerName>\<InstanceName> -i <MyScript.sql> -o <MyOutput.rpt>
Подключитесь к экземпляру по умолчанию на локальном компьютере с проверкой подлинности Windows, выполните запрос и сохраните sqlcmd после завершения запроса:
sqlcmd -q "SELECT * FROM AdventureWorks2022.Person.Person"
Подключитесь к экземпляру по умолчанию на локальном компьютере с проверкой подлинности Windows, выполните запрос, перенаправите выходные данные в файл и закройте sqlcmd после завершения запроса:
sqlcmd -Q "SELECT * FROM AdventureWorks2022.Person.Person" -o MyOutput.txt
Подключитесь к именованном экземпляру с помощью проверки подлинности SQL Server для интерактивного запуска инструкций T-SQL с запросом на ввод пароля:
sqlcmd -U MyLogin -S <ComputerName>\<InstanceName>
Совет
Для просмотра полного перечня параметров, поддерживаемых служебной программой sqlcmd , введите
sqlcmd -?
.
Интерактивный запуск инструкций Transact-SQL с помощью программы sqlcmd
Программу sqlcmd можно использовать интерактивно для выполнения инструкций T-SQL в окне командной строки. Для интерактивного выполнения инструкций T-SQL с помощью sqlcmd запустите программу без использования -Q
, -q
-Z
или -i
параметров, чтобы указать входные файлы или запросы. Например:
sqlcmd -S <ComputerName>\<InstanceName>
Если команда выполняется без входных файлов или запросов, sqlcmd подключается к указанному экземпляру SQL Server, а затем отображает новую строку с символом подчеркивания, 1>
который называется строкой sqlcmd . Указывает 1
, что это первая строка инструкции T-SQL, а запрос sqlcmd — это точка, в которой инструкция T-SQL начинается при вводе в нее.
В командной строке sqlcmd можно вводить инструкции T-SQL и команды sqlcmd, например GO
и EXIT
. Каждая инструкция T-SQL помещается в буфер, называемый кэшем инструкций. Эти инструкции отправляются в SQL Server после ввода GO
команды и нажатия клавиши ВВОД. Чтобы выйти из sqlcmd, введите EXIT
или QUIT
в начале новой строки.
Чтобы очистить кэш инструкций, введите :RESET
. Ввод клавиш CTRL+C приводит к выходу sqlcmd . Ctrl+C также можно использовать для остановки выполнения кэша инструкций после GO
выдачи команды.
Инструкции T-SQL, введенные в интерактивном сеансе, можно изменить, введя :ED
команду и запрос sqlcmd . Редактор откроется и после редактирования инструкции T-SQL и закрытия редактора в командном окне появится измененная инструкция T-SQL. Введите GO
, чтобы запустить измененную инструкцию T-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:\Temp\>
Это означает, что папка C:\Temp\
является текущей папкой, и если указать имя файла, Windows ищет файл в этой папке.
Введите sqlcmd для подключения к экземпляру SQL Server по умолчанию на локальном компьютере, а содержимое окна командной строки выглядит следующим образом:
C:\Temp>sqlcmd
1>
Это означает, что вы подключились к экземпляру SQL Server и sqlcmd теперь готовы принять инструкции T-SQL и команды sqlcmd . Мигающий знак подчеркивания после 1>
запроса sqlcmd , который помечает расположение, в котором отображаются операторы и команды, которые вы вводите. Теперь введите USE AdventureWorks2022
и нажмите клавишу ВВОД, а затем введите GO
и нажмите клавишу ВВОД. Содержимое окна командной строки выглядит следующим образом:
sqlcmd
USE AdventureWorks2022;
GO
Вот результирующий набор.
Changed database context to 'AdventureWorks2022'.
1>
При нажатии клавиши ВВОД он сигнализирует sqlcmd о запуске новой строки. Нажатие клавиши ВВОД после ввода GO
сигналов sqlcmd для отправки USE AdventureWorks2022
инструкции в экземпляр SQL Server. Затем sqlcmd возвращает сообщение, указывающее, что USE
инструкция успешно завершена, и отображает новую 1>
строку в качестве сигнала для ввода новой инструкции или команды.
В следующем примере показано, какое окно командной строки содержит, если ввести SELECT
инструкцию, GO
выполнить SELECT
инструкцию и EXIT
выйти из sqlcmd:
USE AdventureWorks2022;
GO
SELECT TOP (3) BusinessEntityID, FirstName, LastName
FROM Person.Person;
GO
Вот результирующий набор.
BusinessEntityID FirstName LastName
----------------- ---------- ------------
1 Syed Abbas
2 Catherine Abel
3 Kim Abercrombie
После создания выходных данных sqlcmd сбрасывает запрос sqlcmd и отображает.1>
Введите EXIT
в запросе 1>
, чтобы выйти из сеанса. Теперь можно закрыть окно командной строки. Для этого введите еще одну команду EXIT
.
Создание и запрос контейнера SQL Server
Для создания нового экземпляра SQL Server в контейнере можно использовать sqlcmd (Go). sqlcmd (Go) предоставляет create
инструкцию, которая позволяет указать образ контейнера и резервное копирование SQL Server, чтобы быстро создать экземпляр SQL Server для разработки, отладки и анализа.
В следующей команде показано, как просмотреть все доступные параметры для создания нового контейнера SQL Server:
sqlcmd create mssql --help
Следующая команда создает новый экземпляр SQL Server с помощью последней версии SQL Server 2022 (16.x), а затем восстанавливает образец базы данных Wide World Importers:
sqlcmd create mssql --accept-eula --tag 2022-latest --using https://github.com/Microsoft/sql-server-samples/releases/download/wide-world-importers-v1.0/WideWorldImporters-Full.bak
После создания экземпляра SQL Server можно использовать sqlcmd (Go) для управления и запроса.
Следующая команда подтверждает версию созданного экземпляра:
sqlcmd query "SELECT @@version"
Следующая команда запускает интерактивный сеанс с созданным экземпляром:
sqlcmd query
Следующая команда открывает Azure Data Studio и автоматически подключается к базе данных, восстановленной во время создания:
sqlcmd open ads
Следующая команда содержит список строка подключения, которые будут использоваться для подключения к созданному экземпляру:
sqlcmd config connection-strings
Следующая команда используется для удаления контейнера, если он больше не нужен:
sqlcmd delete
Выполнение файлов скриптов Transact-SQL с помощью sqlcmd
Вы можете использовать программу sqlcmd для выполнения файлов скриптов базы данных. Файлы скриптов — это текстовые файлы, содержащие сочетание инструкций T-SQL, команд sqlcmd и переменных скриптов. Дополнительные сведения об использовании переменных скрипта см. в разделе Использование программы sqlcmd с переменными скрипта. Программаsqlcmd работает с инструкциями, командами и переменными скрипта, помещенными в файл скрипта, подобно тому как она работает с инструкциями и командами, вводимыми в интерактивном режиме. Главное отличие заключается в том, что программа sqlcmd без остановок считывает входной файл, а не ждет, пока пользователь введет инструкции, команды или переменные скрипта.
Существуют различные способы создания файлов скрипта базы данных:
Вы можете интерактивно создавать и отлаживать набор инструкций T-SQL в SQL Server Management Studio, а затем сохранять содержимое окна запроса в виде файла скрипта.
Текстовый файл, содержащий инструкции T-SQL, можно создать с помощью текстового редактора, например Блокнота.
Примеры
А. Запуск скрипта с помощью sqlcmd
Запустите Блокнот и введите следующие инструкции T-SQL:
USE AdventureWorks2022;
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
Вот результирующий набор.
Changed database context to 'AdventureWorks2022'.
BusinessEntityID FirstName LastName
----------------- ---------- ------------
1 Syed Abbas
2 Catherine Abel
3 Kim Abercrombie
(3 rows affected)
B. Использование sqlcmd с выделенным административным подключением
В следующем примере sqlcmd используется для подключения к серверу с блокировкой с помощью выделенного подключения администратора (DAC).
C:\Temp\>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 AdventureWorks2022;
GO
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;
GO
В командной строке sqlcmd введите следующее:
C:\Temp\sqlcmd
1> :Setvar FirstName Gustavo
1> :Setvar LastName Achong
1> EXEC dbo.ContactEmailAddress $(FirstName),$(LastName)
2> GO
EmailAddress
-----------------------------
gustavo0@adventure-works.com
D. Использование sqlcmd для обслуживания базы данных
В следующем примере показано, как использовать sqlcmd для задачи обслуживания базы данных. Создайте C:\Temp\BackupTemplate.sql
со следующим кодом.
USE master;
BACKUP DATABASE [$(db)] TO DISK='$(bakfile)';
В командной строке sqlcmd введите следующий код:
C:\Temp\>sqlcmd
1> :connect <server>
Sqlcmd: Successfully connected to server <server>.
1> :setvar db msdb
1> :setvar bakfile C:\Temp\msdb.bak
1> :r C:\Temp\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:\Temp\>sqlcmd -d AdventureWorks2022
1> :XML ON
1> SELECT TOP 3 FirstName + ' ' + LastName + ', '
2> FROM Person.Person
3> GO
Syed Abbas, Catherine Abel, Kim Abercrombie,
F. Использование sqlcmd в файле скрипта Windows
Команда sqlcmd , например sqlcmd -i C:\Temp\InputFile.txt -o C:\Temp\OutputFile.txt,
, может выполняться в файле .bat вместе с VBScript. В этом случае не используйте интерактивные параметры. Программаsqlcmd должна быть установлена на компьютере, на котором выполняется BAT-файл.
Сначала создайте в следующих четырех файлах C:\Temp
:
C:\Temp\badscript.sql
SELECT batch_1_this_is_an_error GO SELECT 'batch #2' GO
C:\Temp\goodscript.sql
SELECT 'batch #1'; GO SELECT 'batch #2'; GO
C:\Temp\returnvalue.sql
:exit(select 100)
C:\Temp\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:\Temp\windowsscript.bat
:
C:\Temp\>windowsscript.bat
Running badscript.sql
== An error occurred
Running goodscript.sql
Running returnvalue.sql
SQLCMD returned 100 to the command shell
G. Использование sqlcmd для задания шифрования в База данных SQL Azure
sqlcmd можно выполнить при подключении к База данных SQL данным, чтобы указать шифрование и доверие сертификатов. Доступны два варианта sqlcmd :
Параметр
-N
используется клиентом для запроса зашифрованного подключения. Этот параметр аналогичен параметру ADO.netENCRYPT = true
.Параметр
-C
используется клиентом для настройки неявного сертификата сервера доверия и не проверяет его. Этот параметр аналогичен параметру ADO.netTRUSTSERVERCERTIFICATE = 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
в строка подключения.