Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Относится к:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Аналитическая платформа (PDW)
SQL база данных в 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и-U-P) указывают учетные данные, которые sqlcmd использует для подключения к экземпляру SQL Server.Note
-EПараметр по умолчанию и не требуется указывать.Параметры ввода (
-Q,-qи-i) определяют расположение входных данных в sqlcmd.Параметр вывода (
-o) указывает файл, в который sqlcmd помещает свои выходные данные.
Подключение к программе sqlcmd
Подключитесь к экземпляру по умолчанию с помощью проверки подлинности Windows, чтобы интерактивно выполнять запросы T-SQL.
sqlcmd -S <ComputerName>Note
В предыдущем примере
-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 на ввод пароля.
sqlcmd -U MyLogin -S <ComputerName>\<InstanceName>Tip
Для просмотра полного перечня параметров, поддерживаемых служебной программой sqlcmd , введите
sqlcmd -?.
Интерактивный запуск инструкций Transact-SQL с помощью программы sqlcmd
Программу sqlcmd можно использовать интерактивно для выполнения инструкций T-SQL в окне командной строки. Для интерактивного выполнения инструкций T-SQL с помощью sqlcmd запустите программу без использования -Q, -q-Zили -i параметров, чтобы указать входные файлы или запросы. Рассмотрим пример.
sqlcmd -S <ComputerName>\<InstanceName>
Если команда выполняется без входных файлов или запросов, sqlcmd подключается к указанному экземпляру SQL Server, а затем отображает новую строку с мигающим символом подчеркивания, 1> который называется приглашением sqlcmd. Первая строка инструкции T-SQL обозначается символом 1, а ввод команды начинается с приглашения 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, можно создать с помощью текстового редактора, например Блокнота.
Examples
A. Запуск скрипта с помощью sqlcmd
Запустите Блокнот и введите следующие инструкции T-SQL:
USE AdventureWorks2022;
GO
SELECT TOP (3) BusinessEntityID, FirstName, LastName
FROM Person.Person;
GO
Создайте папку с именем MyFolder и сохраните скрипт в виде файла MyScript.sql в папке C:\MyFolder. Введите следующую команду в командной строке, чтобы запустить скрипт и поместить выходные данные в MyOutput.txtMyFolder:
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
C. Использование 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)
E. Использование sqlcmd для выполнения кода на нескольких экземплярах
Код в файле ниже показывает скрипт, который подключается к двум экземплярам. Обратите внимание на команду GO перед подключением ко второму экземпляру.
:CONNECT <server>\,<instance1>
EXEC dbo.SomeProcedure
GO
:CONNECT <server>\,<instance2>
EXEC dbo.SomeProcedure
GO
E. Возврат выходных данных 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' GOC:\Temp\goodscript.sql
SELECT 'batch #1'; GO SELECT 'batch #2'; GOC:\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_DEFAULTSSET ANSI_NULLSSET REMOTE_PROC_TRANSACTIONSSET ANSI_NULL_DEFAULT
Следующие параметры SET не вызывают исключений, но не могут использоваться. Они устарели:
SET CONCAT_NULL_YIELDS_NULLSET ANSI_PADDINGSET QUERY_GOVERNOR_COST_LIMIT
Syntax
В следующих примерах приведены случаи, когда параметры поставщика собственных клиентов SQL Server включают:
ForceProtocolEncryption = FalseTrust Server Certificate = No
Подключение с использованием учетных данных Windows и шифрование соединения:
sqlcmd -E -N
Подключение с использованием учетных данных Windows и доверие сертификату сервера:
sqlcmd -E -C
Подключение с использованием учетных данных Windows, шифрование соединения и доверие сертификату сервера:
sqlcmd -E -N -C
В следующих примерах приведены случаи, когда параметры поставщика собственных клиентов SQL Server включают:
ForceProtocolEncryption = TrueTrustServerCertificate = Yes
Подключение с использованием учетных данных Windows, шифрование соединения и доверие сертификату сервера:
sqlcmd -E
Подключение с использованием учетных данных Windows, шифрование соединения и доверие сертификату сервера:
sqlcmd -E -N
Подключение с использованием учетных данных Windows, шифрование соединения и доверие сертификату сервера:
sqlcmd -E -C
Подключение с использованием учетных данных Windows, шифрование соединения и доверие сертификату сервера:
sqlcmd -E -N -C
Если поставщик указывает ForceProtocolEncryption = True, шифрование включено, даже если Encrypt=No в строке подключения.