Использование программы sqlcmd

Применимо к: SQL Server Azure SQL DatabaseУправляемый экземпляр SQL AzureAzure Synapse AnalyticsAnalytics 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 .

Дальнейшие действия