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>]
Description
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 Database 引擎的具名實例,並執行基本的 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 Database Engine 實例的 SQL Server Windows PowerShell 提供者路徑。
然後它會呼叫 Get-Item 來擷取 SQL Management Object Server 物件,以作為 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
輸出
格式化數據表