Invoke-Sqlcmd
运行包含 SQL Server SQLCMD 实用工具支持的语句的脚本。
语法
Invoke-Sqlcmd
[-ServerInstance <PSObject>]
[-Database <String>]
[-EncryptConnection]
[-Username <String>]
[-Password <String>]
[[-Query] <String>]
[-QueryTimeout <Int32>]
[-ConnectionTimeout <Int32>]
[-ErrorLevel <Int32>]
[-SeverityLevel <Int32>]
[-MaxCharLength <Int32>]
[-MaxBinaryLength <Int32>]
[-AbortOnError]
[-DedicatedAdministratorConnection]
[-DisableVariables]
[-DisableCommands]
[-HostName <String>]
[-NewPassword <String>]
[-Variable <String[]>]
[-InputFile <String>]
[-OutputSqlErrors <Boolean>]
[-IncludeSqlUserErrors]
[-SuppressProviderContextWarning]
[-IgnoreProviderContext]
[<CommonParameters>]
说明
Invoke-Sqlcmd cmdlet 运行包含 SQL Server SQLCMD 实用工具支持的语言和命令的脚本。
支持的命令是 Transact-SQL 语句和数据库引擎支持的 XQuery 语法的子集。
此 cmdlet 还接受 SQLCMD 本机支持的许多命令,例如 GO 和 QUIT。
此 cmdlet 还接受 SQLCMD 脚本变量,例如 SQLCMDUSER。
默认情况下,此 cmdlet 不设置 SQLCMD 脚本变量。
此 cmdlet 不支持使用主要与交互式脚本编辑相关的命令。
这些不支持的命令包括 :!!、:connect、:error、:out、:ed、:list、:listvar、:reset、:perftrace 和 :serverlist。
运行此 cmdlet 时,脚本返回的第一个结果集将显示为带格式的表。
如果后续结果集包含与第一个结果集不同的列列表,则不会显示这些结果集。
如果第一个结果集之后的后续结果集具有相同的列列表,则它们的行将追加到包含第一个结果集返回的行的格式化表中。
可以通过指定 Verbose 参数来显示SQL Server消息输出,例如 SQL PRINT 语句生成的输出。
示例
示例 1:连接到命名实例并运行脚本
PS C:\> Invoke-Sqlcmd -Query "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance "MyComputer\MainInstance"
TimeOfQuery
-----------
5/13/2010 8:49:43 PM
此命令连接到计算机上的 SQL 数据库 引擎的命名实例,并运行基本的 Transact-SQL 脚本。
示例 2:调用脚本文件中的命令并将输出保存在文本文件中
PS C:\> Invoke-Sqlcmd -InputFile "C:\ScriptFolder\TestSqlCmd.sql" | Out-File -FilePath "C:\ScriptFolder\TestSqlCmd.rpt"
Output sent to TestSqlCmd.rpt.
此命令读取包含 Transact-SQL 语句和 SQLCMD 命令的文件,运行该文件,并将输出写入另一个文件。
输出文件可能包含专有信息,因此应使用适当的 NTFS 权限保护输出文件。
示例 3:调用脚本并从字符串传入变量值
PS C:\> $StringArray = "MYVAR1='String1'", "MYVAR2='String2'"
PS C:\> Invoke-Sqlcmd -Query "SELECT `$(MYVAR1) AS Var1, `$(MYVAR2) AS Var2;" -Variable $StringArray
Var1 Var2
---- ----
String1 String2
此命令使用字符串数组作为 Variable 参数的输入。
数组定义多个 SQLCMD 变量。
在 SELECT 语句中标识 SQLCMD 变量的 $ 符号使用反向刻度 (') 字符进行转义。
示例 4:调用脚本并从 SQL 数据库引擎传入变量
PS C:\>Set-Location "SQLSERVER:\SQL\MyComputer\MainInstance"
PS C:\>Invoke-Sqlcmd -Query "SELECT SERVERPROPERTY('MachineName') AS ComputerName;" -ServerInstance (Get-Item .)
ComputerName
------------
MyComputer
此命令使用 Set-Location 导航到SQL 数据库引擎实例的SQL Server Windows PowerShell提供程序路径。
然后,它调用 Get-Item 来检索 SQL 管理对象服务器对象,用作 Invoke-Sqlcmd 的 ServerInstance 参数。
示例 5:运行查询并显示详细输出
PS C:\> Invoke-Sqlcmd -Query "PRINT N'abc'" -Verbose
VERBOSE: abc
此命令使用 Windows PowerShell Verbose 参数返回 SQL PRINT 命令的消息输出。
示例 6:使用位置字符串作为输入调用命令
PS C:\> Invoke-Sqlcmd "SELECT DB_NAME() AS DatabaseName;"
WARNING: Using provider context. Server = MyComputer, Database = AdventureWorks2014.
DatabaseName
------------
AdventureWorks2014
此命令使用位置字符串向 Query 参数提供输入。
它还演示 了 Invoke-Sqlcmd 如何使用当前路径将数据库上下文设置为 AdventureWorks2014。
参数
-AbortOnError
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-ConnectionTimeout
类型: | Int32 |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-Database
类型: | String |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-DedicatedAdministratorConnection
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-DisableCommands
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-DisableVariables
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-EncryptConnection
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-ErrorLevel
类型: | Int32 |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-HostName
类型: | String |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-IgnoreProviderContext
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-IncludeSqlUserErrors
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
类型: | String |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-MaxBinaryLength
类型: | Int32 |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-MaxCharLength
类型: | Int32 |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-NewPassword
类型: | String |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-OutputSqlErrors
类型: | Boolean |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-Password
类型: | String |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-Query
类型: | String |
Position: | 1 |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-QueryTimeout
类型: | Int32 |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-ServerInstance
类型: | PSObject |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | True |
接受通配符: | False |
-SeverityLevel
类型: | Int32 |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-SuppressProviderContextWarning
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-Username
类型: | String |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-Variable
类型: | String[] |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
PSObject
输出
带格式的表