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


командлет 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, были экранированы с помощью символа экранирования PowerShell "`".

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

Это пример использования поставщика SQL Server в Windows PowerShell для перехода к экземпляру сервера баз данных и использования командлета Get-Item для получения объекта 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\ComputerName База данных по умолчанию для логина в стандартной конфигурации на указанном компьютере.
SQLSERVER:\SQL\ComputerName\InstanceName База данных по умолчанию для идентификатора входа в указанном экземпляре на указанном компьютере.
SQLSERVER:\SQL\ComputerName\InstanceName\Databases База данных по умолчанию для идентификатора входа в указанном экземпляре на указанном компьютере.
SQLSERVER:\SQL\ComputerName\InstanceName\Databases\DatabaseName Указанная база данных в указанном экземпляре на указанном компьютере. Это также относится к более длинным путям, таким как путь, указывающий узел таблиц и столбцов в базе данных.

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

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. Параметр -IgnoreProviderContext можно использовать для того, чтобы Invoke-Sqlcmd всегда использовать базу данных по умолчанию для входа.

Сравнение Invoke-Sqlcmd и служебной программы sqlcmd

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

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

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

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

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

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

Описание Параметр sqlcmd параметр Invoke-Sqlcmd
Имя сервера и имя экземпляра. -ServerInstance
Исходная база данных, используемая. -d -База данных
Выполните указанный запрос и выйдите. -Q -Запрос
Идентификатор входа для аутентификации SQL Server. -U -Имя пользователя
Пароль проверки подлинности SQL Server. -P -Пароль
Определение переменной. -v -Переменная
Интервал времени ожидания запроса. -t -QueryTimeout (тайм-аут запроса)
Остановить выполнение при возникновении ошибки -b -AbortOnError
Специальное подключение администратора. -A -DedicatedAdministratorConnection
Отключите интерактивные команды, скрипт запуска и переменные среды. -X -ОтключитьКоманды
Отключите подстановку переменных. -x -ОтключитьПеременные
Минимальный уровень серьезности для сообщения. -V -SeverityLevel
Минимальный уровень ошибок для создания отчета -m -ErrorLevel
Интервал времени ожидания входа. -l -ConnectionTimeout
Имя узла. -H -HostName
Изменение пароля и выход. -Z -NewPassword
Входной файл, содержащий запрос -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 Нет параметра

См. также

Используйте командлеты движка базы данных
Служебная программа sqlcmd
Использование программы sqlcmd