Invoke-Sqlcmd

运行包含 SQL Server SQLCMD 实用工具支持的语句的脚本。

语法

Invoke-Sqlcmd
      [-ServerInstance <PSObject>]
      [-Database <String>]
      [-Encrypt <String>]
      [-EncryptConnection]
      [-Username <String>]
      [-AccessToken <String>]
      [-Password <String>]
      [-Credential <PSCredential>]
      [[-Query] <String>]
      [-QueryTimeout <Int32>]
      [-ConnectionTimeout <Int32>]
      [-ErrorLevel <Int32>]
      [-SeverityLevel <Int32>]
      [-MaxCharLength <Int32>]
      [-MaxBinaryLength <Int32>]
      [-AbortOnError]
      [-DedicatedAdministratorConnection]
      [-DisableVariables]
      [-DisableCommands]
      [-HostName <String>]
      [-ApplicationName <String>]
      [-ApplicationIntent <ApplicationIntent>]
      [-MultiSubnetFailover]
      [-FailoverPartner <String>]
      [-HostNameInCertificate <String>]
      [-TrustServerCertificate]
      [-NewPassword <String>]
      [-Variable <PSObject>]
      [-InputFile <String>]
      [-OutputSqlErrors <Boolean>]
      [-IncludeSqlUserErrors]
      [-SuppressProviderContextWarning]
      [-IgnoreProviderContext]
      [-OutputAs <OutputType>]
      [-StatisticsVariable <String>]
      [<CommonParameters>]
Invoke-Sqlcmd
      [-AccessToken <String>]
      [[-Query] <String>]
      [-QueryTimeout <Int32>]
      [-ErrorLevel <Int32>]
      [-SeverityLevel <Int32>]
      [-MaxCharLength <Int32>]
      [-MaxBinaryLength <Int32>]
      [-AbortOnError]
      [-DisableVariables]
      [-DisableCommands]
      [-Variable <PSObject>]
      [-InputFile <String>]
      [-OutputSqlErrors <Boolean>]
      [-IncludeSqlUserErrors]
      [-OutputAs <OutputType>]
      -ConnectionString <String>
      [-KeyVaultAccessToken <String>]
      [-ManagedHsmAccessToken <String>]
      [-StatisticsVariable <String>]
      [<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:连接到命名实例并运行脚本

Invoke-Sqlcmd -Query "SELECT GETDATE() AS TimeOfQuery" -ServerInstance "MyComputer\MainInstance"

TimeOfQuery
-----------
9/21/2017 2:48:24 PM

此命令连接到计算机上的 SQL 数据库 引擎的命名实例,并运行基本的 Transact-SQL 脚本。

示例 2:调用脚本文件中的命令并将输出保存在文本文件中

Invoke-Sqlcmd -InputFile "C:\ScriptFolder\TestSqlCmd.sql" | Out-File -FilePath "C:\ScriptFolder\TestSqlCmd.rpt"
Output sent to TestSqlCmd.rpt.

此命令读取包含 Transact-SQL 语句和 SQLCMD 命令的文件,运行该文件,并将输出写入另一个文件。

输出文件可能包含专有信息,因此应使用适当的 NTFS 权限保护输出文件。

示例 3:调用脚本并从字符串传入变量值

$StringArray = "MYVAR1='String1'", "MYVAR2='String2'"
Invoke-Sqlcmd -Query "SELECT `$(MYVAR1) AS Var1, `$(MYVAR2) AS Var2" -Variable $StringArray

Var1     Var2
----     ----
String1  String2

此命令使用字符串数组作为 Variable 参数的输入。

数组定义多个 SQLCMD 变量。

在 SELECT 语句中标识 SQLCMD 变量的 $ 符号使用反向刻度 (') 字符进行转义。

示例 4:调用脚本并从 SQL 数据库引擎传入变量

Set-Location "SQLSERVER:\SQL\MyComputer\MainInstance"
PS SQLSERVER:\SQL\MyComputer\MainInstance> Invoke-Sqlcmd -Query "SELECT SERVERPROPERTY('MachineName') AS ComputerName" -ServerInstance (Get-Item .)

ComputerName
------------
MyComputer

此命令使用 Set-Location 导航到SQL 数据库引擎实例的 SQL ServerWindows PowerShell 提供程序路径。

然后,它调用 Get-Item 来检索 SQL Management Object Server 对象,以用作 Invoke-Sqlcmd 的 ServerInstance 参数。

示例 5:运行查询并显示详细输出

Set-Location "SQLSERVER:\SQL\MyComputer\MainInstance"
Invoke-SqlCmd -Query "PRINT N'abc'" -Verbose
VERBOSE: abc

此命令使用 Windows PowerShellVerbose 参数返回 SQL PRINT 命令的消息输出。

示例 6:使用位置字符串作为输入调用命令

Set-Location "SQLSERVER:\SQL\MyComputer\MainInstance\Databases\MyDatabase"
PS SQLSERVER:\SQL\MyComputer\MainInstance> Invoke-Sqlcmd "SELECT DB_NAME() AS DatabaseName"
WARNING: Using provider context. Server = MyComputer\MainInstance, Database = MyDatabase.

DatabaseName
------------
MyDatabase

此命令使用位置字符串向 Query 参数提供输入。

它还演示了 Invoke-Sqlcmd 如何使用当前路径将数据库上下文设置为 MyDatabase。

示例 7:将数据捕获到 DataSet 对象中

$DS = Invoke-Sqlcmd -ServerInstance "MyComputer" -Query "SELECT  ID, Item FROM MyDB.dbo.MyTable" -As DataSet
$DS.Tables[0].Rows | %{ echo "{ $($_['ID']), $($_['Item']) }" }

{ 10, AAA }
{ 20, BBB }
{ 30, CCC }

此命令使用 As DataSet 参数将数据捕获到 .Net System.Data.DataSet 对象中,并将结果存储在变量“$DS”中。 对象可用于进一步处理。

示例 8:获取特定列集

$Tables = Invoke-Sqlcmd -ServerInstance "MyComputer" -Query "SELECT  Item, id FROM MyDatabase.dbo.MyTable; SELECT GETDATE() AS T" -As DataTables
$Tables[0].Rows | %{ echo $_.ID }
$Tables[1].Rows | %{ echo $_.T.DayOfWeek }

10
20
30

Monday

第一个命令使用 As DataTables 参数将数据捕获到 .Net System.Data.DataTable 对象的集合中。 命令获取具有不同列集的两个表。

可以根据自己的架构单独处理每个表。

示例 9:完全控制连接

Invoke-Sqlcmd -Query "SELECT COUNT(*) AS Count FROM MyTable" -ConnectionString "Data Source=MYSERVER;Initial Catalog=MyDatabase;Integrated Security=True;ApplicationIntent=ReadOnly"
Count
-----
127432

此命令使用 -ConnectionString 参数来完全控制此 cmdlet 建立的连接,而不是 Invoke-Sqlcmd 基于命令行传递的参数生成连接字符串。

这对于你可能想要使用的不太常见的属性很有用。

示例 10:执行存储过程并捕获 SQL 错误

$script_sp_with_errors = @'
CREATE PROCEDURE [dbo].[TestProcedure3]
AS 
BEGIN 
  CREATE TABLE [dbo].[TestTable] (col INT NOT NULL);
  INSERT INTO [dbo].[TestTable] VALUES (NULL); -- will cause an error
END
GO
'@

# Create a test database
Invoke-SqlCmd -ServerInstance MyServer -Query 'CREATE DATABASE TestDB'
# ... adds a stored procedure that has errors in it...
Invoke-SqlCmd -ServerInstance MyServer -Database 'TestDB' -Query $script_sp_with_errors
# ... executes the SP and collected the errors
Invoke-SqlCmd -ServerInstance MyServer -Database 'TestDB' -Query 'EXEC TestProcedure3' -OutputSqlErrors $true

Here's the output:
Invoke-SqlCmd : Cannot insert the value NULL into column 'col', table 'TestDB.dbo.TestTable'; column does not allow nulls. INSERT fails.
The statement has been terminated.
 Msg 515, Level 16, State 2, Procedure TestProcedure3, Line 5.
At line:1 char:1
...

此命令使用 -OutputSqlErrors 参数向用户报告错误。 请注意,本例中的错误消息提供了额外的信息,例如 SP 名称和发生错误的行号。

示例 11:使用访问令牌连接到 Azure SQL 数据库 (或托管实例)

Import-Module SQLServer
Import-Module Az.Accounts -MinimumVersion 2.2.0

# Note: the sample assumes that you or your DBA configured the server to accept connections using
#       that Service Principal and has granted it access to the database (in this example at least
#       the SELECT permission).

### Obtain the Access Token: this will bring up the login dialog
Connect-AzAccount
$access_token = (Get-AzAccessToken -ResourceUrl https://database.windows.net).Token

# Now that we have the token, we use it to connect to the database 'mydb' on server 'myserver'
Invoke-Sqlcmd -ServerInstance myserver.database.windows.net -Database mydb -AccessToken $access_token`
              -query 'select * from Table1'

示例 12:使用服务主体连接到Azure SQL数据库 (或托管实例)

Import-Module SQLServer

# Note: the sample assumes that you or your DBA configured the server to accept connections using
#       that Service Principal and has granted it access to the database (in this example at least
#       the SELECT permission).

$clientid = "enter application id that corresponds to the Service Principal" # Do not confuse with its display name
$tenantid = "enter the tenant ID of the Service Principal"
$secret = "enter the secret associated with the Service Principal"

$request = Invoke-RestMethod -Method POST `
           -Uri "https://login.microsoftonline.com/$tenantid/oauth2/token"`
           -Body @{ resource="https://database.windows.net/"; grant_type="client_credentials"; client_id=$clientid; client_secret=$secret }`
           -ContentType "application/x-www-form-urlencoded"
$access_token = $request.access_token

# Now that we have the token, we use it to connect to the database 'mydb' on server 'myserver'
Invoke-Sqlcmd -ServerInstance myserver.database.windows.net -Database mydb -AccessToken $access_token`
              -query 'select * from Table1'

示例 13:使用系统分配的托管标识 (SAMI) 连接到 Azure SQL 数据库 (或托管实例)

Import-Module SQLServer

# Note: the sample assumes that you or your DBA configured the server to accept connections using
#       that VM Identity you are running on and has granted it access to the database (in this 
#       example at least the SELECT permission).

Connect-AzAccount -Identity
$access_token = (Get-AzAccessToken -ResourceUrl https://database.windows.net).Token

# Now that we have the token, we use it to connect to the database 'mydb' on server 'myserver'
Invoke-Sqlcmd -ServerInstance myserver.database.windows.net -Database mydb -AccessToken $access_token `
              -query 'select * from Table1'

示例 14:使用用户分配的托管标识 (UAMI) 连接到 Azure SQL 数据库 (或托管实例)

Import-Module SQLServer

# Note: the sample assumes that you or your DBA configured the server to accept connections using
#       that VM Identity you are running on and has granted it access to the database (in this 
#       example at least the SELECT permission).

Connect-AzAccount -Identity -AccountId '<your-user-assigned-managed-identity-client-id>'
$access_token = (Get-AzAccessToken -ResourceUrl https://database.windows.net).Token

# Now that we have the token, we use it to connect to the database 'mydb' on server 'myserver'
Invoke-Sqlcmd -ServerInstance myserver.database.windows.net -Database mydb -AccessToken $access_token `
              -query 'select * from Table1'

示例 15:使用 -ApplicationIntent 连接到为 Read-Only 路由配置的可用性组

# In the following example:
# - MT_2009250511 is a listener for an AG configured for Read-Only Routing (port 5555)
# - AGDB_2_1 is the DB in the AG
# - VLM00226138 is the primary replica configured to only allow ReadWrite connections 
# - VLM00226137 is the secondary replica
# 
Invoke-Sqlcmd -ServerInstance "MT_2009250511,5555" -Database AGDB_2_1 `
     -HostName "PowershellBox1" -ApplicationName "ReadWrite" -ApplicationIntent ReadWrite `
     -Query "select HOST_NAME() AS HostName, APP_NAME() AS ApplicationIntent, @@SERVERNAME AS ServerName"

Invoke-Sqlcmd -ServerInstance "MT_2009250511,5555" -Database AGDB_2_1 `
     -HostName "PowershellBox2" -ApplicationName "ReadOnly" -ApplicationIntent ReadOnly `
     -Query "select HOST_NAME() AS HostName, APP_NAME() AS ApplicationIntent, @@SERVERNAME AS ServerName"  

# When you run the 2 cmdlets above, the output is going to be something like this:  
#  
# HostName       ApplicationIntent ServerName  
# --------       ----------------- ----------  
# PowershellBox1 ReadWrite         VLM00226138  
#  
# HostName       ApplicationIntent ServerName  
# --------       ----------------- ----------  
# PowershellBox2 ReadOnly          VLM00226137

这显示,根据 参数的值 -ApplicationIntent ,连接将路由到 AG 中的其他服务器。 顺便说一句,观察 -ApplicationName 使用 和 -HostName 参数来直观地区分两个结果:这是一种常见技术,可用于跟踪连接及其意向,除了此处演示的 -ApplicationIntent 示例。

示例 16:通过 -StatisticsVariable 参数捕获连接统计信息

Import-Module SQLServer
Invoke-Sqlcmd -ServerInstance localhost -StatisticsVariable stats `
              -Query 'CREATE TABLE #Table (ID int); INSERT INTO #Table VALUES(1), (2); INSERT INTO #Table VALUES(3); SELECT * FROM #Table'

Write-Host "Number of rows affected......: $($stats.IduRows)"
Write-Host "Number of insert statements..: $($stats.IduCount)"
Write-Host "Number of select statements..: $($stats.SelectCount)"
Write-Host "Total execution time.........: $($stats.ExecutionTime)ms"

# When you run the code fragment above, is going to be something like this:  
#
# Number of rows affected......: 3
# Number of insert statements..: 2
# Number of select statements..: 1
# Total execution time.........: 5ms

此示例演示如何使用 -StatisticsVariable 参数捕获有关连接、执行的语句和执行时间的信息时,运行创建临时表的 T-SQL,插入一些值,最后发出选择以获取所有插入的行。

注意:当对多个服务器执行同一查询时, (例如,通过 cmdlet) 管道服务器名称,捕获 StatisticsVariable 一个统计信息数组,每个连接一个。 然后,可以使用 (例如 ($stats.IduRows | Measure-Object -Sum).Sum)聚合结果。

有关可用统计信息的详细信息,请参阅SQL Server提供程序统计信息。

示例 17:运行一个查询,以解密从使用 Always Encrypted 加密的列检索到的数据。 假设列主密钥存储在 Azure 密钥保管库的密钥保管库中。

# Connect to Azure account.
Import-Module Az.Accounts -MinimumVersion 2.2.0
Connect-AzAccount

# Obtain an access token for key vaults. 
$keyVaultAccessToken = (Get-AzAccessToken -ResourceUrl https://vault.azure.net).Token

# Pass the token to the cmdlet, so that it can use it to authenticate to Azure when decrypting data protected with Always Encrypted.
$connString = 'Data Source=MYSERVER;Initial Catalog=MyDatabase;Integrated Security=True;ApplicationIntent=ReadOnly;Column Encryption Setting=Enabled'
Invoke-Sqlcmd -Query 'SELECT COUNT(*) AS Count FROM MyTable' -ConnectionString $connString -KeyVaultAccessToken $keyVaultAccessToken

参数

-AbortOnError

指示如果此 cmdlet 遇到错误,此 cmdlet 会停止 SQL Server 命令,并将错误级别返回到 Windows PowerShell ERRORLEVEL 变量。

如果错误的严重级别高于 10,则返回的错误级别为 1;否则返回的错误级别为 0。

如果还指定了 ErrorLevel 参数,则仅当错误消息严重性也等于或高于为 ErrorLevel 指定的值时,此 cmdlet 才返回 1。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-AccessToken

用于对SQL Server进行身份验证的访问令牌,作为用户/密码或 Windows 身份验证的替代方法。

例如,这可用于连接到 SQL Azure DB 或使用 SQL Azure Managed InstanceService PrincipalManaged Identity (查看本页底部的引用)

在常见情况下,此参数是通过类似 (Get-AzAccessToken -ResourceUrl https://database.windows.net).Token (需要 Az.Account 模块)

使用此参数时,请勿指定 UserNamePasswordCredential

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ApplicationIntent

连接到SQL Server可用性组中的数据库时的应用程序工作负荷类型。

允许的值为:ReadOnly 和 ReadWrite。

Type:ApplicationIntent
Accepted values:ReadWrite, ReadOnly
Position:Named
Default value:ReadWrite
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ApplicationName

与连接关联的应用程序的名称。

Type:String
Position:Named
Default value:.NET SqlClient Data Provider
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ConnectionString

指定要连接到服务器的连接字符串。

Type:String
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-ConnectionTimeout

指定当此 cmdlet 无法成功连接到数据库引擎实例时超时的秒数。 超时值必须是介于 0 和 65534 之间的整数值。 如果指定 0,则连接尝试将没有超时限制。

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Credential

将使用其“用户名”和“密码”字段连接到 SQL 实例的 PSCredential 对象。

Type:PSCredential
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Database

指定数据库的名称。 此 cmdlet 连接到 ServerInstance 参数中指定的实例中的此数据库。

如果未指定 Database 参数,则使用的数据库取决于当前路径是否同时指定 SQLSERVER:\SQL 文件夹和数据库名称。 如果路径同时指定 SQL 文件夹和数据库名称,则此 cmdlet 将连接到路径中指定的数据库。 如果路径不基于 SQL 文件夹,或者路径不包含数据库名称,则此 cmdlet 将连接到当前登录 ID 的默认数据库。 如果指定 IgnoreProviderContext 参数开关,则此 cmdlet 不会考虑在当前路径中指定的任何数据库,并连接到定义为当前登录 ID 的默认数据库。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-DedicatedAdministratorConnection

指示此 cmdlet 使用专用管理员连接 (DAC) 连接到数据库引擎的实例。

系统管理员将 DAC 用于某些操作,如排除不接受新标准连接的实例的故障。

必须将实例配置为支持 DAC。

如果未启用 DAC,则此 cmdlet 将报告错误,并且不会运行。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-DisableCommands

指示此 cmdlet 关闭在批处理文件中运行时可能会危及安全性的某些 sqlcmd 功能。

它可防止将Windows PowerShell变量传递到 Invoke-Sqlcmd 脚本。

不运行在 SQLCMDINI 脚本变量中指定的启动脚本。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-DisableVariables

指示此 cmdlet 忽略 sqlcmd 脚本变量。 当脚本中包含多个 INSERT 语句,并且这些语句可能包含格式与变量(如 $(variable_name))相同的字符串时,这一选项很有用。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Encrypt

连接到SQL Server时使用的加密类型。

此值映射到 Encrypt Microsoft.Data.SqlClient 驱动程序的 SqlConnection 对象上的 属性 SqlConnectionEncryptOption

如果未指定,则默认值为 Mandatory

此参数是模块 v22 中的新增参数。 有关更多详细信息,请参阅Strict Connection Encryption相关链接下。

Type:String
Accepted values:Mandatory, Optional, Strict
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-EncryptConnection

指示此 cmdlet 使用安全套接字层 (SSL/TLS) 加密连接到 ServerInstance 参数中指定的数据库引擎实例。

从模块的 v22 开始,此参数已弃用。 默认情况下,Connections是加密的。 请考虑改用新的 -Encrypt 参数。 有关更多详细信息,请参阅Strict Connection Encryption相关链接下。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ErrorLevel

指定此 cmdlet 仅显示严重性级别等于或高于指定值的错误消息。 如果未指定此参数或将此参数设置为 0,则显示所有错误消息。 数据库引擎错误的严重级别介于 1 到 24 之间。

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-FailoverPartner

主服务器关闭时要连接到的伙伴服务器的名称或地址。

Type:String
Position:Named
Default value:""
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-HostName

指定工作站名称。 工作站名称由 sp_who 系统存储过程报告,在 sys.processes 目录视图的 hostname 列中显示。 如果未指定此参数,则默认值为运行 Invoke-Sqlcmd 的计算机的名称。 此参数可用于标识不同的 Invoke-Sqlcmd 会话。

Type:String
Aliases:WorkstationID
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-HostNameInCertificate

验证 SQL Server TLS/SSL 证书时要使用的主机名。 如果SQL Server实例启用了强制加密,并且你想要使用主机名/shortname 连接到实例,则必须传递此参数。 如果省略此参数,则必须将完全限定的域名 (FQDN) 传递给 -ServerInstance 才能连接到启用强制加密的SQL Server实例。

此参数是模块 v22 中的新增参数。 有关更多详细信息,请参阅Strict Connection Encryption相关链接下。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-IgnoreProviderContext

指示此 cmdlet 忽略由当前 SQLSERVER:\SQL 路径建立的数据库上下文。 如果未指定 Database 参数,则此 cmdlet 会将默认数据库用于当前登录 ID 或 Windows 帐户。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-IncludeSqlUserErrors

指示此 cmdlet 返回默认忽略的 SQL 用户脚本错误。 如果指定此参数,则此 cmdlet 将匹配 sqlcmd 实用工具的默认行为。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InputFile

指定要用作此 cmdlet 查询输入的文件。 该文件可以包含 Transact-SQL 语句、XQuery 语句以及 sqlcmd 命令和脚本变量。 指定文件的完整路径。 文件路径或文件名中不允许包含空格。 文件应使用 UTF-8 进行编码。

应仅从受信任的源运行脚本。 确保使用合适的 NTFS 权限保护所有输入脚本的安全。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-KeyVaultAccessToken

为 Azure 密钥保管库中的密钥保管库指定访问令牌。 如果使用 Azure 密钥保管库密钥保管库中存储的列主密钥Always Encrypted保护要查询的任何列,请使用此参数。 或者,在调用此 cmdlet 之前,可以使用 Add-SqlAzureAuthenticationContext 向 Azure 进行身份验证。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ManagedHsmAccessToken

指定 Azure 密钥保管库中托管 HSM 的访问令牌。 如果使用 Azure 密钥保管库中托管 HSM 中存储的列主密钥Always Encrypted保护要查询的任何列,请使用此参数。 或者,在调用此 cmdlet 之前,可以使用 Add-SqlAzureAuthenticationContext 向 Azure 进行身份验证。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-MaxBinaryLength

指定为包含二进制字符串数据类型(如 binary 和 varbinary)的列返回的最大字节数。 默认值为 1,024 个字节。

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-MaxCharLength

指定为包含字符或 Unicode 数据类型(如 char、nchar、varchar 和 nvarchar)的列返回的最大字符数。 默认值为 4,000 个字符。

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-MultiSubnetFailover

如果应用程序连接到不同子网上的 AlwaysOn 可用性组 (AG) ,则传递此参数可以更快地检测并连接到当前) 活动服务器的 (。

注意:.NET Framework 4.6.1 或更高版本不需要传递 -MultiSubnetFailover。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-NewPassword

指定 SQL Server 身份验证登录 ID 的新密码。 此 cmdlet 会更改密码,然后退出。 还必须指定“用户名”和“密码”参数,并使用“密码”指定登录名的当前密码。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-OutputAs

指定此 cmdlet 获取的结果的类型。

如果未为此参数指定值,则 cmdlet 会将该值设置为 DataRows。

Type:OutputType
Aliases:As
Accepted values:DataSet, DataTables, DataRows
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-OutputSqlErrors

指示此 cmdlet 在 Invoke-Sqlcmd 输出中显示错误消息。

Type:Boolean
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Password

指定在 Username 参数中指定的SQL Server身份验证登录 ID 的密码。 密码是区分大小写的。 请尽可能使用 Windows 身份验证。 不要使用空密码,尽可能使用强密码。

如果指定密码参数后跟密码,则任何可以看到监视器的用户都可以看到该密码。

如果在 .ps1 脚本中编码密码后跟密码,则任何读取脚本文件的人都将看到你的密码。

请将合适的 NTFS 权限分配给该文件以防止其他用户读取该文件。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Query

指定此 cmdlet 运行的一个或多个查询。 查询可以是 Transact-SQL 或 XQuery 语句,也可以是 sqlcmd 命令。 可以指定用分号分隔的多个查询。 不指定 sqlcmd GO 分隔符。 转义字符串中包含的所有双引号。 考虑使用方括号括起来的标识符(如 [MyTable])替代引号引起来的标识符(如“MyTable”)。

Type:String
Position:0
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-QueryTimeout

指定查询超时前的秒数。如果未指定超时值,则查询不会超时。超时必须是介于 1 和 65535 之间的整数值。

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ServerInstance

指定字符串或SQL Server管理对象 (SMO) 对象,该对象指定数据库引擎实例的名称。 对于默认实例,仅指定计算机名称:MyComputer。 对于命名实例,请使用 ComputerName\InstanceName 格式。

Type:PSObject
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-SeverityLevel

指定此 cmdlet 返回到 ERRORLEVEL Windows PowerShell 变量的错误消息严重性级别的下限。

此 cmdlet 从其运行的查询生成的错误消息中返回最高严重性级别,前提是严重性等于或高于 SeverityLevel 参数中指定的级别。

如果未指定 SeverityLevel 或设置为 0,则此 cmdlet 会将 0 返回到 ERRORLEVEL。

数据库引擎错误消息的严重级别介于 1 到 24 之间。

此 cmdlet 不会报告严重性为 10 的信息性消息的严重性

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-StatisticsVariable

指定在执行 cmdlet 时将为其分配SQL Server运行时统计信息的 PowerShell 变量的名称。

此参数的常见用途是捕获 ExecutionTime (提供程序处理 cmdlet) ) 累积 (时间,或 IduRows (受 INSERT、DELETE 和 UPDATE 语句) 影响的行总数。

有关更多详细信息,请参阅SQL Server的提供程序统计信息

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SuppressProviderContextWarning

指示此 cmdlet 禁止显示当前 SQLSERVER:\SQL 路径设置中此 cmdlet 在数据库上下文中使用的警告,以便为 cmdlet 建立数据库上下文。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-TrustServerCertificate

指示是否在绕过证书链以验证信任时对通道进行加密。

此参数是模块 v22 中的新增参数。 有关更多详细信息,请参阅Strict Connection Encryption相关链接下。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Username

为建立到数据库引擎实例的 SQL Server 身份验证连接指定登录 ID。

密码必须通过 Password 参数指定。

如果未指定用户名和密码,则此 cmdlet 将使用运行Windows PowerShell会话的 Windows 帐户尝试 Windows 身份验证连接。 请尽可能使用 Windows 身份验证。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Variable

指定一组用于 sqlcmd 脚本的 sqlcmd 脚本变量,并设置变量的值。

使用Windows PowerShell数组指定多个变量及其值;或者,使用 ,Hashtable其中键表示变量名称,值表示变量值。

使用数组时,会剪裁参数值。 此行为保留在模块的 v22 中,以便与 v21 向后兼容。 建议不要依赖此行为,该行为在模块的未来主版本中可能会更改。

类型的 Hashtable 参数仅在模块的 v22+ 中可用。

Type:PSObject
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

输入

System.Management.Automation.PSObject

输出

System.Object