Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Invoke-Sqlcmd is a SQL Server cmdlet that runs scripts that contain statements from the languages (Transact-SQL and XQuery) and commands that are supported by the sqlcmd utility.
Using Invoke-Sqlcmd
The Invoke-Sqlcmd cmdlet lets you run your sqlcmd script files in a Windows PowerShell environment. Much of what you can do with sqlcmd can also be done using Invoke-Sqlcmd.
This is an example of calling Invoke-Sqlcmd to execute a simple query, similar to specifying sqlcmd with the -Q and -S options:
Invoke-Sqlcmd -Query "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance "MyComputer\MyInstance"
This is an example of calling Invoke-Sqlcmd, specifying an input file and piping the output to a file This is similar to specifying sqlcmd with the -i and -o options:
Invoke-Sqlcmd -InputFile "C:\MyFolder\TestSQLCmd.sql" | Out-File -FilePath "C:\MyFolder\TestSQLCmd.rpt"
This is an example of using a Windows PowerShell array to pass multiple sqlcmd scripting variables to Invoke-Sqlcmd. The "$" characters identifying the sqlcmd scripting variables in the SELECT statement have been escaped by using the PowerShell back-tick "`" escape character:
$MyArray = "MyVar1 = 'String1'", "MyVar2 = 'String2'"
Invoke-Sqlcmd -Query "SELECT `$(MyVar1) AS Var1, `$(MyVar2) AS Var2;" -Variable $MyArray
This is an example of using the SQL Server provider for Windows PowerShell to navigate to an instance of the Database Engine, and then using the Windows PowerShell Get-Item cmdlet to retrieve the SMO Server object for the instance and passing it to Invoke-Sqlcmd:
Set-Location SQLSERVER:\SQL\MyComputer\MyInstance
Invoke-Sqlcmd -Query "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance (Get-Item .)
The -Query parameter is positional and does not have to be named. If the first string that is passed to Invoke-Sqlcmd: is unnamed, it is treated as the -Query parameter.
Invoke-Sqlcmd "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance "MyComputer\MyInstance"
Path Context in Invoke-Sqlcmd
If you do not use the -Database parameter, the database context for Invoke-Sqlcmd is set by the path that is active when the cmdlet is called.
| Path | Database Context |
|---|---|
| Starts with a drive other than SQLSERVER: | The default database for the login ID in the default instance on the local computer. |
| SQLSERVER:\SQL | The default database for the login ID in the default instance on the local computer. |
| SQLSERVER:\SQL\ComputerName | The default database for the login ID in the default instance on the specified computer. |
| SQLSERVER:\SQL\ComputerName\InstanceName | The default database for the login ID in the specified instance on the specified computer. |
| SQLSERVER:\SQL\ComputerName\InstanceName\Databases | The default database for the login ID in the specified instance on the specified computer. |
| SQLSERVER:\SQL\ComputerName\InstanceName\Databases\DatabaseName | The specified database in the specified instance on the specified computer. This also applies to longer paths, such as a path that specifies the Tables and Columns node within a database. |
For example, assume that the default database for your Windows account in the default instance of the local computer is master. Then, the following commands would return master:
Set-Location SQLSERVER:\SQL
Invoke-Sqlcmd "SELECT DB_NAME() AS DatabaseName;"
The following commands would return AdventureWorks2012:
Set-Location SQLSERVER:\SQL\MyComputer\DEFAULT\Databases\AdventureWorks2012\Tables\Person.Person
Invoke-Sqlcmd "SELECT DB_NAME() AS DatabaseName;"
Invoke-Sqlcmd provides a warning when it uses the path database context. You can use the -SuppressProviderContextWarning parameter to turn off the warning message. You can use the -IgnoreProviderContext parameter to tell Invoke-Sqlcmd to always use the default database for the login.
Comparing Invoke-Sqlcmd and the sqlcmd Utility
Invoke-Sqlcmd can be used to run many of the scripts that can be run using the sqlcmd utility. However, Invoke-Sqlcmd runs in a Windows PowerShell environment which is different than the command prompt environment that sqlcmd is run in. The behavior of Invoke-Sqlcmd has been modified to work in a Windows PowerShell environment.
Not all of the sqlcmd commands are implemented in Invoke-Sqlcmd. Commands that are not implemented include the following: :!!, :connect, :error, :out, :ed, :list, :listvar, :reset, :perftrace, and :serverlist.
Invoke-Sqlcmd does not initialize the sqlcmd environment or scripting variables such as SQLCMDDBNAME or SQLCMDWORKSTATION.
Invoke-Sqlcmd does not display messages, such as the output of PRINT statements, unless you specify the Windows PowerShell -Verbose common parameter. For example:
Invoke-Sqlcmd -Query "PRINT N'abc';" -Verbose
Not all of the sqlcmd parameters are needed in a PowerShell environment. For example, Windows PowerShell formats all output from cmdlets, so the sqlcmd parameters specifying formatting options are not implemented in Invoke-Sqlcmd. The following table shows the relationship between the Invoke-Sqlcmd parameters and sqlcmd options:
| Description | sqlcmd option | Invoke-Sqlcmd parameter |
|---|---|---|
| Server and instance name. | -S | -ServerInstance |
| The initial database to use. | -d | -Database |
| Run the specified query and exit. | -Q | -Query |
| SQL Server Authentication login ID. | -U | -Username |
| SQL Server Authentication password. | -P | -Password |
| Variable definition. | -v | -Variable |
| Query timeout interval. | -t | -QueryTimeout |
| Stop running on an error | -b | -AbortOnError |
| Dedicated Administrator Connection. | -A | -DedicatedAdministratorConnection |
| Disable interactive commands, startup script, and environment variables. | -X | -DisableCommands |
| Disable variable substitution. | -x | -DisableVariables |
| Minimum severity level to report. | -V | -SeverityLevel |
| Minimum error level to report. | -m | -ErrorLevel |
| Login timeout interval. | -l | -ConnectionTimeout |
| Hostname. | -H | -HostName |
| Change password and exit. | -Z | -NewPassword |
| Input file containing a query | -i | -InputFile |
| Maximum length of character output. | -w | -MaxCharLength |
| Maximum length of binary output. | -w | -MaxBinaryLength |
| Connect using SSL encryption. | No parameter | -EncryptConnection |
| Display errors | No parameter | -OutputSqlErrors |
| Output messages to stderr. | -r | No parameter |
| Use client's regional settings | -R | No parameter |
| Run the specified query and remain running. | -q | No parameter |
| Code page to use for output data. | -f | No parameter |
| Change a password and remain running | -z | No parameter |
| Packet size | -a | No parameter |
| Column separator | -s | No parameter |
| Control output headers | -h | No parameter |
| Specify control characters | -k | No parameter |
| Fixed length display width | -Y | No parameter |
| Variable length display width | -y | No parameter |
| Echo input | -e | No parameter |
| Enable quoted identifiers | -I | No parameter |
| Remove trailing spaces | -W | No parameter |
| List instances | -L | No parameter |
| Format output as Unicode | -u | No parameter |
| Print statistics | -p | No parameter |
| Command end | -c | No parameter |
| Connect using Windows Authentication | -E | No parameter |
See Also
Use the Database Engine cmdlets
sqlcmd Utility
Use the sqlcmd Utility