簡體   English   中英

Invoke-SQLCMD 無法在 PowerShell 中運行多個 SQL 語句

[英]Invoke-SQLCMD unable to run multiple SQL Statements in PowerShell

我無法從 Invoke-sqlcmd 運行 2 個 SELECT 語句。

$sql ="
select SERVERPROPERTY('ProductVersion') Version
select SERVERPROPERTY('ProductLevel') ServicePack, SERVERPROPERTY('edition') Edition"
    
$server = 'SomeServerName'    
Invoke-Sqlcmd -ServerInstance $server -Query $sql 

只有第一個 TSQL 語句返回結果。

注意:我可以重寫 TSQL 來做一個聲明。 那不是重點。 原始腳本有多個 TSQL 命令。 此外,我可以為每個語句執行單獨的 invoke-sqlcmd 調用。 但是,我試圖了解這是否是invoke-sqlcmd 的限制。

這是預期的行為嗎?

太感謝了。

你已經得到了一個有效的答案,但這更多的是對正在發生的事情的解釋......

基本上,您遇到的是顯示/格式問題,而不是 Invoke-SqlCommand 的問題。

在您的示例中,您的屏幕 output 可能如下所示:

PS> Invoke-Sqlcmd -ServerInstance $server -Query $sql

Version
-------
15.0.2070.41



PS> _

注意表格后面的3 個空白行 - 第一個空白行實際上是第二個 sql 命令的結果!

當 PowerShell 格式化一個項目表時,它使用第一項來決定要顯示哪些列 - 第一個命令的結果只包含一個“版本”列,所以這就是表包含的所有內容。 您的第二個命令的結果沒有“版本”列,因此 PowerShell 在該列中顯示一個空值,但它也不會為您在表中添加“服務包”或“版本”列。

您可以通過使用以下內容指定列名來覆蓋它:

PS> Invoke-Sqlcmd -ServerInstance $server -Query $sql | format-table Version, ServicePack, Edition

Version      ServicePack Edition
-------      ----------- -------
15.0.2070.41
             RTM         Developer Edition (64-bit)


PS> _

請注意,現在表格后面只有2 個空白行,因為第二個結果已被隱藏。

如果您 output 在一個循環中分別顯示兩個結果,則 PowerShell 將顯示兩個單獨的表,並將決定在每個表中分別顯示哪些列,因此您可以根據@Dan Guzman 的回答得到:

Version    
-------    
15.0.4023.6



ServicePack Edition                   
----------- -------                   
RTM         Developer Edition (64-bit)

一種方法是遍歷Invoke-Sqlcmd的結果以顯示多個結果集:

$results = Invoke-Sqlcmd -ServerInstance $server -Query $sql
for ($i = 0; $i -lt $results.Count; ++$i) {
    $results[$i] | Out-Host
}

Output:

Version    
-------    
15.0.4023.6



ServicePack Edition                   
----------- -------                   
RTM         Developer Edition (64-bit)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM