Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
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