2016-05-09 38 views
0

我有一個腳本運行一條select語句,然後通過閱讀器,但是當語句中沒有返回行時,它會跳過閱讀器並稍後導致錯誤在腳本中。PowerShell:如何確定SQL查詢是否返回0行

我希望能有我的劇本做之一:

(一)如果select語句返回行,通過該閱讀器,並完成了劇本,或

如果沒有返回行(二) ,執行其他操作並向主機寫入沒有行被返回的行。

這裏是我目前在腳本的一部分:

$SQLQuery = $("SELECT [Column1] FROM [MyDatabase].[dbo].[MyTable] WHERE Column1 > 0") 

$Connection = New-Object System.Data.SQLClient.SQLConnection 
$Connection.ConnectionString = "server='$Server';database='$Database';trusted_connection=true;" 
$Connection.Open() 
$Command = New-Object System.Data.SQLClient.SQLCommand 
$Command.Connection = $Connection 
$Command.CommandText = $SQLQuery 
$Reader = $Command.ExecuteReader() 
while ($Reader.Read()) { 
    ## do some stuff 
} 

$Connection.Close() 

## The rest of the script..... 

我希望有我的腳本做到這一點:

IF (SQL output returns rows) { 
    do stuff 
} 
ELSEIF (SQL output returns 0 rows) { 
    tell me 0 rows were returned 
} 

感謝。

回答

3

檢查SqlDataReader 上的HasRows屬性您可能需要先執行if檢查並查看是否有返回的行,然後如果有,請繼續閱讀。

If ($Reader.HasRows) { 
     //read your rows. 
} 

else 
{ 
    no rows returned... 
} 
+0

這絕對是完美的謝謝。感謝您的鏈接。我一定會在未來使用它! – danglesauce19

1

如果使用閱讀器,您可以設置一個變量,然後再檢查它。

$processed=$false 
while ($Reader.Read()) { 
    $processed=$true 
    ## do some stuff 
} 

if ($processed) { 
    ## at least one row was found 
} else { 
    ## no rows were found 
} 
+0

@cableload答案中的HasRows在大多數情況下顯然更加整潔。 –