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


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-символа обратной кавычки PowerShell "`":

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

Ниже приведен пример использования поставщика SQL Server для Windows PowerShell для перехода к экземпляру ядра СУБД, а затем с помощью командлета Get-Item Windows PowerShell получить объект SMO Server для экземпляра и передать его в 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;"  

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

Set-Location SQLSERVER:\SQL\MyComputer\DEFAULT\Databases\AdventureWorks2012\Tables\Person.Person  
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, :p erftrace и :serverlist.

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

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

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

В среде 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 -HostName
Изменение пароля и выход -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 Параметр отсутствует

См. также:

Использование командлетов компонента Database Engine
Программа sqlcmd
Использование программы sqlcmd