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


Использование командлета Invoke-Sqlcmd

Invoke-Sqlcmd представляет собой командлет SQL Server, предназначенный для выполнения сценариев, которые содержат инструкции определенных языков (Transact-SQL и XQuery) и команды, поддерживаемые программой sqlcmd.

Использование командлета Invoke-Sqlcmd

Командлет Invoke-Sqlcmd позволяет запускать файлы сценариев sqlcmd в среде Windows PowerShell. Значительная часть действий, выполняемых с помощью программы sqlcmd, может быть также выполнена с помощью командлета Invoke-Sqlcmd.

Ниже приведен пример вызова командлета Invoke-Sqlcmd для выполнения простого запроса. Этот вызов аналогичен вызову команды sqlcmd с параметрами -Q и -S:

Invoke-Sqlcmd -Query "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance "MyComputer\MyInstance"

В этом примере вызывается командлет Invoke-Sqlcmd, указывается входной файл и вывод перенаправляется прямо в файл. Это аналогично заданию команды sqlcmd с параметрами -i и -o:

Invoke-Sqlcmd -InputFile "C:\MyFolder\TestSQLCmd.sql" | Out-File -filePath "C:\MyFolder\TestSQLCmd.rpt"

В следующем примере массив Windows PowerShell используется для передачи нескольких переменных сценария sqlcmd в командлет Invoke-Sqlcmd. Символы «$», обозначающие переменные сценария sqlcmd в инструкции SELECT, экранируются escape-символом обратной кавычки Windows PowerShell «`»:

$MyArray = "MyVar1 = 'String1'", "MyVar2 = 'String2'"
Invoke-Sqlcmd -Query "SELECT `$(MyVar1) AS Var1, `$(MyVar2) AS Var2;" -Variable $MyArray

В следующем примере с помощью поставщика SQL Server выполняется переход к экземпляру компонента Database Engine, а затем с помощью командлета Get-Item среды Windows PowerShell получается объект сервера SMO для этого экземпляра и передается командлету Invoke-Sqlcmd:

Set-Location SQLSERVER:\SQL\MyComputer\MyInstance
Invoke-Sqlcmd -Query "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance (Get-Item .)

Параметр -Query является позиционным, ему не обязательно присваивать имя. Если первая строка, которая передается командлету Invoke-Sqlcmd, не имеет имени, то она обрабатывается как параметр -Query.

Invoke-Sqlcmd "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance "MyComputer\MyInstance"

Путь к контексту в Invoke-Sqlcmd

Если параметр -Database не используется, то контекст базы данных для Invoke-Sqlcmd задается путем, который активен во время вызове командлета.

Путь

Контекст базы данных

Начинается с диска, отличного от SQLSERVER:

База данных по умолчанию для данного идентификатора входа в экземпляре по умолчанию на локальном компьютере.

SQLSERVER:\SQL

База данных по умолчанию для данного идентификатора входа в экземпляре по умолчанию на локальном компьютере.

SQLSERVER:\SQL\имя_компьютера

База данных по умолчанию для данного идентификатора входа в экземпляре по умолчанию на указанном компьютере.

SQLSERVER:\SQL\имя_компьютера\имя_экземпляра

База данных по умолчанию для данного идентификатора входа в указанном экземпляре на указанном компьютере.

SQLSERVER:\SQL\имя_компьютера\имя_экземпляра\Databases

База данных по умолчанию для данного идентификатора входа в указанном экземпляре на указанном компьютере.

SQLSERVER:\SQL\имя_компьютера\имя_экземпляра\Databases\имя_базы данных

Указанная база данных в указанном экземпляре на указанном компьютере. Это также применимо к более длинным путям, например к пути, указывающему узел «Таблицы и столбцы» в базе данных.

Например, предположим, что база данных по умолчанию для данной учетной записи Windows в экземпляре по умолчанию локального компьютера является основной. В этом случае следующие команды возвратят значение «master»:

Set-Location SQLSERVER:\SQL
Invoke-Sqlcmd "SELECT DB_NAME() AS DatabaseName;"

Следующие команды возвратят значение AdventureWorks:

Set-Location SQLSERVER:\SQL\MyComputer\DEFAULT\Databases\AdventureWorks\Tables\Person.Contact
Invoke-Sqlcmd "SELECT DB_NAME() AS DatabaseName;"

Командлет Invoke-Sqlcmd выдает предупреждение при использовании контекста базы данных на основании пути. Чтобы отключить сообщение с предупреждением, используется параметр -SuppressProviderContextWarning. Чтобы командлет Invoke-Sqlcmd всегда использовал для входа базу данных по умолчанию, используется параметр -IgnoreProviderContext.

Сравнение командлета Invoke-Sqlcmd и программы sqlcmd

Командлет Invoke-Sqlcmd может использоваться для запуска многих сценариев, которые могут быть также выполнены с помощью программы sqlcmd. Однако командлет Invoke-Sqlcmd работает в среде Windows PowerShell, которая отличается от среды командной строки, в которой работает sqlcmd. Правила работы Invoke-Sqlcmd изменены в целях поддержки работы в среде Windows PowerShell.

Тем не менее в командлете Invoke-Sqlcmd реализованы не все команды sqlcmd. Нереализованные команды включают следующее: :!!, :connect, :error, :out, :ed, :list, :listvar, :reset, :perftrace и :serverlist.

Командлет Invoke-Sqlcmd не инициализирует среду sqlcmd или переменные сценария, такие как SQLCMDDBNAME или SQLCMDWORKSTATION.

Командлет Invoke-Sqlcmd не отображает сообщения, такие как выходные данные инструкций PRINT, если не указан общий параметр -Verbose среды Windows PowerShell. Пример:

Invoke-Sqlcmd -Query "PRINT N'abc';" -Verbose

В среде Windows PowerShell требуются не все параметры sqlcmd. Например, среда Windows PowerShell форматирует все выходные данные командлетов, поэтому параметры форматирования sqlcmd не реализованы в командлете Invoke-Sqlcmd. В следующей таблице показана связь между параметрами Invoke-Sqlcmd и параметрами sqlcmd.

Описание

Параметр sqlcmd

Параметр Invoke-Sqlcmd

Сервер и имя экземпляра

-S

-ServerInstance

Используемая исходная база данных

-d

-Database

Выполнение указанного запроса и выход

-Q

-Query

Идентификатор входа проверки подлинности SQL Server.

-U

-Username

Пароль проверки подлинности SQL Server.

-P

-Password

Определение переменной

-v

-Variable

Интервал времени ожидания запроса

-t

-QueryTimeout

Прекращение выполнения в случае ошибки

-b

-AbortOnError

Выделенное административное соединение

-A

-DedicatedAdministratorConnection

Отключение интерактивных команд, сценария запуска и переменных среды

-X

-DisableCommands

Отключение подстановки переменных

-x

-DisableVariables

Минимальная степень серьезности для формирования отчета

-V

-SeverityLevel

Минимальный уровень ошибки для формирования отчета

-m

-ErrorLevel

Интервал времени ожидания входа

-l

-ConnectionTimeout

Имя узла

-H

-HbostName

Изменение пароля и выход

-Z

-NewPassword

Входной файл, содержащий запрос

-i

-InputFile

Максимальная длина символьных выходных данных

-w

-MaxCharLength

Максимальная длина двоичных выходных данных

-w

-MaxBinaryLength

Подключаться с помощью шифрования SSL

Параметр отсутствует

-EncryptConnection

Отображать сообщения об ошибках

Параметр отсутствует

-OutputSqlErrors

Выводить сообщения в поток stderr

-r

Параметр отсутствует

Использовать региональные настройки клиента

-R

Параметр отсутствует

Выполнить указанный запрос и продолжить работу

-q

Параметр отсутствует

Кодовая страница, применяемая для выходных данных

-f

Параметр отсутствует

Сменить пароль и продолжить работу

-z

Параметр отсутствует

Размер пакета

-a

Параметр отсутствует

Разделитель столбцов

-s

Параметр отсутствует

Управлять заголовками выходных данных

-h

Параметр отсутствует

Указать управляющие символы

-k

Параметр отсутствует

Постоянная ширина экрана

-Y

Параметр отсутствует

Переменная ширина экрана

-y

Параметр отсутствует

Эхо-повтор входных данных

-e

Параметр отсутствует

Включить использование заключенных в кавычки идентификаторов

-I

Параметр отсутствует

Удалить конечные пробелы

-W

Параметр отсутствует

Перечислить экземпляры

-L

Параметр отсутствует

Форматировать выходные данные в формате Юникод

-u

Параметр отсутствует

Напечатать статистику

-p

Параметр отсутствует

Окончание команды

-c

Параметр отсутствует

Подключение с помощью проверки подлинности Windows

-E

Параметр отсутствует