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