共用方式為


Invoke-Sqlcmd Cmdlet

Invoke-Sqlcmd 是 SQL Server Cmdlet,可執行腳本,其中包含來自 sqlcmd 公用程式所支援的語句(Transact-SQL 和 XQuery) 和命令。

使用 Invoke-Sqlcmd

Invoke-Sqlcmd Cmdlet 可讓您在 Windows PowerShell 環境中執行 sqlcmd 腳本檔案。 您也可以使用 Invoke-Sqlcmd 來完成使用 sqlcmd 執行的大部分工作。

這是呼叫 Invoke-Sqlcmd 來執行簡單查詢的範例,類似於使用 -Q-S 選項指定 sqlcmd

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

這是呼叫 Invoke-Sqlcmd、指定輸入檔並將輸出管線傳送至檔案的範例。這類似於使用 -i-o 選項指定 sqlcmd

Invoke-Sqlcmd -InputFile "C:\MyFolder\TestSQLCmd.sql" | Out-File -FilePath "C:\MyFolder\TestSQLCmd.rpt"  

這是使用 Windows PowerShell 陣列將多個 sqlcmd 腳本變數傳遞至 Invoke-Sqlcmd 的範例。 識別 SELECT 語句中 sqlcmd 腳本變數的 “$” 字元已使用 PowerShell 反向勾選 “'” 逸出字元來逸出:

$MyArray = "MyVar1 = 'String1'", "MyVar2 = 'String2'"  
Invoke-Sqlcmd -Query "SELECT `$(MyVar1) AS Var1, `$(MyVar2) AS Var2;" -Variable $MyArray  

這是使用適用於 Windows PowerShell 的 SQL Server 提供者巡覽至 Database Engine 實例的範例,然後使用 Windows PowerShell Get-Item Cmdlet 擷取實例的 SMO Server 物件,並將其傳遞至 Invoke-Sqlcmd

Set-Location SQLSERVER:\SQL\MyComputer\MyInstance  
Invoke-Sqlcmd -Query "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance (Get-Item .)  

-Query 參數是位置,不需要命名。 如果傳遞至 Invoke-Sqlcmd: 的第一個字串未命名,則會將其視為 -Query 參數。

Invoke-Sqlcmd "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance "MyComputer\MyInstance"  

Invoke-Sqlcmd 中的路徑內容

如果您沒有使用 -Database 參數,Invoke-Sqlcmd 的資料庫內容是由呼叫 Cmdlet 時作用中的路徑所設定。

路徑 資料庫內容
從 SQLSERVER 以外的磁碟驅動器開始: 本機計算機上預設實例中登入標識碼的預設資料庫。
SQLSERVER:\SQL 本機計算機上預設實例中登入標識碼的預設資料庫。
SQLSERVER:\SQL\ComputerName 指定計算機上預設實例中登入標識碼的預設資料庫。
SQLSERVER:\SQL\ComputerName\InstanceName 指定計算機上指定實例中登入標識碼的預設資料庫。
SQLSERVER:\SQL\ComputerName\InstanceName\Databases 指定計算機上指定實例中登入標識碼的預設資料庫。
SQLSERVER:\SQL\ComputerName\InstanceName\Databases\DatabaseName 指定計算機上指定實例中的指定資料庫。 這也適用於較長的路徑,例如指定資料庫內 [數據表和數據行] 節點的路徑。

例如,假設本機計算機預設實例中 Windows 帳戶的預設資料庫是 master。 然後,下列命令會傳回 master:

Set-Location SQLSERVER:\SQL  
Invoke-Sqlcmd "SELECT DB_NAME() AS DatabaseName;"  

下列命令會傳回 AdventureWorks2012

Set-Location SQLSERVER:\SQL\MyComputer\DEFAULT\Databases\AdventureWorks2012\Tables\Person.Person  
Invoke-Sqlcmd "SELECT DB_NAME() AS DatabaseName;"  

Invoke-Sqlcmd 使用路徑資料庫內容時提供警告。 您可以使用 -SuppressProviderContextWarning 參數來關閉警告訊息。 您可以使用 -IgnoreProviderContext 參數,告訴 Invoke-Sqlcmd 一律使用預設資料庫進行登入。

比較 Invoke-Sqlcmd 和 sqlcmd 公用程式

Invoke-Sqlcmd 可用來執行許多可使用 sqlcmd 公用程式執行的腳本。 不過, Invoke-Sqlcmd 會在與 sqlcmd 執行所在的 命令提示字元環境不同的 Windows PowerShell 環境中執行。 Invoke-Sqlcmd 的行為已修改為在 Windows PowerShell 環境中運作。

並非所有 的 sqlcmd 命令都是在 Invoke-Sqlcmd 中實作。 未實作的命令包括::!!:connect:error:out:ed:list:listvar:reset:perftrace:serverlist

Invoke-Sqlcmd 不會初始化 sqlcmd 環境或腳本變數,例如 SQLCMDDBNAME 或 SQLCMDWORKSTATION。

Invoke-Sqlcmd 不會顯示訊息,例如 PRINT 語句的輸出,除非您指定 Windows PowerShell -Verbose 通用參數。 例如:

Invoke-Sqlcmd -Query "PRINT N'abc';" -Verbose  

PowerShell 環境中不需要所有的 sqlcmd 參數。 例如,Windows PowerShell 會格式化 Cmdlet 的所有輸出,因此不會在 Invoke-Sqlcmd 中實作指定格式化選項的 sqlcmd 參數。 下表顯示 Invoke-Sqlcmd 參數與 sqlcmd 選項之間的關聯性:

說明 sqlcmd 選項 Invoke-Sqlcmd 參數
伺服器和實例名稱。 -S -伺服器實例
要使用的初始資料庫。 -d -資料庫
執行指定的查詢並結束。 -Q -查詢
SQL Server 驗證登入標識碼。 -U -Username
SQL Server 驗證密碼。 -P -密碼
變數定義。 -v -變數
查詢超時時間間隔。 -t -QueryTimeout
當發生錯誤時停止運行 -b -AbortOnError
專用系統管理員連線。 -A -專用管理員連接
停用互動式命令、啟動腳本和環境變數。 -X -停用指令
停用變數替代。 -x -停用變數
要報告的嚴重性層級下限。 -V -SeverityLevel
要報告的最小錯誤層級。 -m -錯誤層級
登入超時時間間隔 -l -連線超時(ConnectionTimeout)
主機名。 -H -主機名稱
變更密碼並結束。 -Z -新密碼
包含查詢的輸入檔 -i -InputFile
字元輸出的最大長度。 -w -MaxCharLength
二進位輸出的最大長度。 -w -最大二進制長度
使用 SSL 加密進行連線。 無參數 -EncryptConnection
顯示錯誤 無參數 -OutputSqlErrors
將訊息輸出至 stderr。 -r 無參數
使用客戶端的區域設定 -R 無參數
執行指定的查詢並繼續執行。 -q 無參數
用於輸出數據的代碼頁。 -f 無參數
變更密碼並繼續執行 -z 無參數
封包大小 -a 無參數
資料行分隔符號 -S 無參數
控制輸出標頭 -h 無參數
指定控制字元 -k 無參數
固定長度顯示寬度 -Y 無參數
可調顯示寬度 -y 無參數
回應輸入 -e 無參數
啟用引號識別符 -我 無參數
拿掉尾端空格 -W 無參數
列出執行個體 -L 無參數
將輸出格式化為 Unicode -u 無參數
列印統計資料 -p 無參數
命令結束 -c 無參數
使用 Windows 驗證進行連線 -E 無參數

另請參閱

使用資料庫引擎命令列小程式
sqlcmd 公用程式
使用 sqlcmd 公用程式