共用方式為


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

輸出

格式化數據表