Поделиться через


Используйте sqlcmd

Относится к:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsАналитическая платформа (PDW)SQL база данных в Microsoft Fabric

sqlcmd — это программа командной строки для нерегламентированного интерактивного выполнения инструкций и скриптов Transact-SQL (T-SQL). Он также автоматизирует задачи скриптов T-SQL. Чтобы использовать sqlcmd интерактивно или создавать файлы скриптов для sqlcmd, следует понимать T-SQL. Sqlcmd можно использовать различными способами. Рассмотрим пример.

  • Введите инструкции T-SQL из интерфейса командной строки (CLI). Консоль возвращает результаты.

    Note

    В Windows можно открыть окно командной строки с помощью cmd поля поиска Windows и выбрать командную строку. В macOS и Linux можно использовать встроенный эмулятор терминала.

    Введите sqlcmd в консоль, укажите нужные параметры, а затем нажмите Enter. Полный список параметров, поддерживаемых 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 AdventureWorks2025.Person.Person"
    
  • Подключитесь к экземпляру по умолчанию на локальном компьютере с проверкой подлинности Windows, выполните запрос, перенаправите выходные данные в файл и закройте sqlcmd после завершения запроса:

    sqlcmd -Q "SELECT * FROM AdventureWorks2025.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 команды.

Введите команду в командной строке :EDsqlcmd , чтобы изменить инструкции T-SQL. Откроется редактор, после редактирования инструкции 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 .

При открытии окна консоли в Windows могут появиться выходные данные, аналогичные следующему примеру:

C:\Temp\>

Эта строка означает, что папка C:\Temp\ является текущей папкой. Если указать имя файла, операционная система ищет файл в этой папке.

Введите sqlcmd , чтобы подключиться к экземпляру SQL Server по умолчанию на локальном компьютере. Содержимое окна консоли выглядит следующим образом:

C:\Temp>sqlcmd
1>

Это означает, что вы подключены к экземпляру SQL Server. sqlcmd теперь готов принимать инструкции T-SQL и команды sqlcmd . Мигающее подчеркивание после 1> является приглашением sqlcmd. Он указывает на место, где отображаются вводимые вами инструкции и команды. Теперь введите USE AdventureWorks2025 и нажмите клавишу ВВОД. Затем введите GO и нажмите клавишу ВВОД. Содержимое консоли выглядит следующим образом:

sqlcmd
USE AdventureWorks2025;
GO

Вот набор результатов.

Changed database context to 'AdventureWorks2025'.
1>

При нажатии клавиши ВВОД он сигнализирует sqlcmd о запуске новой строки. Нажатие клавиши ВВОД после ввода GO сигнализирует sqlcmd отправить USE AdventureWorks2025 инструкцию в экземпляр SQL Server. Затем sqlcmd возвращает сообщение, указывающее, что USE инструкция успешно завершена. В нем отображается новая строка 1>, как сигнал для ввода новой инструкции или команды.

В следующем примере показано, что содержит консоль, если ввести команду SELECT, выполнить GO, и EXIT для выхода из sqlcmd:

USE AdventureWorks2025;
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 команду, а затем нажмите Enter.

Создание и запрос контейнера SQL Server

Для создания нового экземпляра SQL Server в контейнере можно использовать sqlcmd (Go). sqlcmd (Go) предоставляет create инструкцию для указания образа контейнера и резервного копирования SQL Server. Вы можете быстро создать экземпляр SQL Server для целей разработки, отладки и анализа.

Important

Требуется установленная среда выполнения контейнера, например Docker или Podman.

В следующей команде показано, как просмотреть все доступные параметры для создания нового контейнера SQL Server:

sqlcmd create mssql --help

Следующая команда создает новый экземпляр SQL Server с помощью последней версии SQL Server 2025 (17.x), а затем восстанавливает образец базы данных Wide World Importers:

sqlcmd create mssql --accept-eula --tag 2025-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

Следующая команда перечисляет строки подключения, которые можно использовать для подключения к этому созданному экземпляру.

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 AdventureWorks2025;
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 'AdventureWorks2025'.
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 AdventureWorks2025;
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

F. Возврат выходных данных XML

В следующем примере показано, как выходные данные XML возвращаются в виде неформатированного непрерывного потока.

C:\Temp\>sqlcmd -d AdventureWorks2025
1> :XML ON
1> SELECT TOP 3 FirstName + ' ' + LastName + ', '
2> FROM Person.Person
3> GO
Syed Abbas, Catherine Abel, Kim Abercrombie,

G. Использование 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

H. Использование sqlcmd для задания шифрования в База данных SQL Azure

Вы можете запустить sqlcmd в подключении к данным базы данных SQL, чтобы указать шифрование и доверие сертификатов. Доступны два варианта sqlcmd :

  • Параметр -N — это запрос клиента для зашифрованного подключения. Этот параметр аналогичен параметру ADO.NET ENCRYPT = true.

  • Переключение -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

Syntax

В следующих примерах приведены случаи, когда параметры поставщика собственных клиентов 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 в строке подключения.