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


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

    sqlcmd -Q "SELECT * FROM AdventureWorks.Person.Contact" -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 AdventureWorks и нажмите клавишу ВВОД, а затем введите GO и снова нажмите клавишу ВВОД. Содержимое окна командной строки будет выглядеть следующим образом.

sqlcmd

USE AdventureWorks;

GO

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

Changed database context to 'AdventureWorks'.

1> _

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

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

sqlcmd

USE AdventureWorks;

GO

SELECT TOP (5) ContactID, FirstName, LastName

FROM Person.Contact;

GO

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

ContactID FirstName LastName

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

1 Syed Abbas

2 Catherine Abel

3 Kim Abercrombie

4 Humberto Acevedo

5 Pilar Ackerman

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

Примеры

А. Запуск сценария с помощью программы sqlcmd

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

USE AdventureWorks;

GO

SELECT TOP (5) ContactID, FirstName, LastName

FROM Person.Contact;

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

ContactID FirstName LastName

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

1 Syed Abbas

2 Catherine Abel

3 Kim Abercrombie

4 Humberto Acevedo

5 Pilar Ackerman

(5 rows affected)

Б. Использование программы 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 rows affected)

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

1> KILL 64;

2> GO

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

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

USE AdventureWorks;

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.Contact

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 AdventureWorks

1> :XML ON

1> SELECT TOP 4 FirstName + ' ' + LastName + ', '

2> FROM Person.Contact

3> GO

Gustavo Achong, Catherine Abel, Kim Abercrombie, Humberto Acevedo,

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