sqlcmd — использование служебной программы

Применимо к:SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure Azure Synapse Analytics AnalyticsPlatform System (PDW)

Служебная программа 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 для разработки, отладки и анализа.

Внимание

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

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

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

Синтаксис

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

Следующие шаги