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

Программа sqlcmd — это программа командной строки Microsoft Win32 для нерегламентированного интерактивного выполнения инструкций и сценариев Transact-SQL и для автоматизации задач сценариев Transact-SQL. Интерактивная работа с sqlcmd и создание файлов скриптов, исполняемых при помощи sqlcmd, требует от пользователя понимания языка Transact-SQL. Программа sqlcmd обычно применяется следующим образом.

  • Пользователь в интерактивном режиме вводит инструкции на языке Transact-SQL так же, как и при работе в командной строке. Результаты выводятся в окно командной строки. Чтобы открыть окно командной строки, в меню Пуск последовательно выберите команды Все программы, Стандартные и Командная строка. В окне командной строки введите 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

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

    sqlcmd -Q "SELECT * FROM AdventureWorks2008R2.Person.Person" -o MyOutput.txt
    
  • Подключение к именованному экземпляру с использованием проверки подлинности SQL Server для выполнения инструкций языка Transact-SQL в интерактивном режиме; программа sqlcmd ожидает ввода пароля:

    sqlcmd -U MyLogin -S <ComputerName>\<InstanceName>
    
    ПримечаниеПримечание

    Чтобы просмотреть полный перечень параметров, поддерживаемых программой sqlcmd, введите: sqlcmd -?.

Интерактивный запуск инструкций Transact-SQL с помощью программы sqlcmd

С помощью программы sqlcmd можно интерактивно запускать инструкции Transact-SQL из окна командной строки. Для интерактивного выполнения инструкций Transact-SQL с помощью программы 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 помещается в буфер, называемый кэш инструкций. После ввода команды GO и нажатия клавиши ВВОД эти инструкции отправляются SQL Server. Для завершения программы 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 будет искать его в этой папке.

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

C:\>sqlcmd

1> _

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

sqlcmd

USE AdventureWorks2008R2;

GO

Ниже приводится результирующий набор.

Changed database context to 'AdventureWorks2008R2'.

1> _

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

В следующем примере показано содержимое командной строки после ввода инструкции SELECT, команды GO для выполнения инструкции SELECT и команды EXIT для завершения программы sqlcmd.

sqlcmd

USE AdventureWorks2008R2;

GO

SELECT TOP (3) BusinessEntityID, FirstName, LastName

FROM Person.Person;

GO

Ниже приводится результирующий набор.

BusinessEntityID FirstName LastName

----------- -------------------------------- -----------

1 Syed Abbas

2 Catherine Abel

3 Kim Abercrombie

(Обработано строк: 3)

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, используя текстовый редактор, например «Блокнот».

Примеры

А. Запуск скрипта с помощью программы sqlcmd

Откройте «Блокнот» и введите следующие инструкции Transact-SQL:

USE AdventureWorks2008R2;

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 'AdventureWorks2008R2'.

BusinessEntityID FirstName LastName

---------------- ----------- -----------

1 Syed Abbas

2 Catherine Abel

3 Kim Abercrombie

(Обработано строк: 3)

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

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

C:\>sqlcmd -S ServerName -A

1> SELECT blocked FROM sys.dm_exec_requests WHERE blocked <> 0;

2> GO

Ниже приводится результирующий набор.

spid blocked

------ -------

62 64

(Обработано строк: 1)

С помощью sqlcmd завершите блокирующий процесс.

1> KILL 64;

2> GO

В. Использование программы sqlcmd для выполнения хранимых процедур

В следующем примере представлено действие, выполняющее хранимую процедуру с помощью sqlcmd. Создайте следующую хранимую процедуру.

USE AdventureWorks2008R2;

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 $(Gustavo),$(Achong)

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 AdventureWorks2008R2

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)
    @echo off
    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

G. Использование программы sqlcmd для включения шифрования в базе данных Microsoft SQL Azure

Программа sqlcmdможет быть запущена при подключении к данным SQL Azure для определения шифрования и отношения доверия сертификата. У программы sqlcmdимеется два параметра.

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

  • C помощью ключа -C клиент настраивает неявное доверие к сертификату сервера без проверки. Этот параметр аналогичен параметру ADO.net TRUSTSERVERCERTIFICATE = true.

Служба SQL Azure не поддерживает все параметры 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 –T

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

SQLCMD –E –N –C

Если поставщик установил значение ForceProtocolEncryption = True, шифрование включается даже в случае, если в строке соединения указано значение Encrypt=No.