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-SqlcmdServerInstance 参数。

示例 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

-InputFile

类型: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

输出

带格式的表