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 Instance
Service Principal
或 Managed Identity
(查看本页底部的引用)
在常见情况下,此参数是通过类似 (Get-AzAccessToken -ResourceUrl https://database.windows.net).Token
(需要 Az.Account 模块)
使用此参数时,请勿指定 UserName、 Password 或 Credential 。
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