2016-05-09 8 views
0

スクリプトでselectステートメントを実行してからリーダーを経由しますが、ステートメントに返された行がないときはリーダーをスキップして後でエラーが発生しますスクリプトで私はできるようにしたいPowerShell:SQLクエリで0行が返されるかどうかを調べる方法

は私のスクリプトは、いずれかを実行しています

(a)のselect文は、読者を通過し、スクリプトを終了し、行を戻す、または

場合(b)の行が戻されなかった場合何か他のことをして、行が返されなかったことをホストに書き出します。ここで

は、私は、スクリプトの一部で、現在持っているものです。

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

ありがとう:

私は私のスクリプトを持ちたい
$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..... 

がこれを行います。

答えて

3

SqlDataReader のHasRowsプロパティを確認する最初にチェックを行い、返された行があるかどうかを確認してから、それがある場合は先読みして読み取ることができます。

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は、ほとんどの状況で明らかに微妙です。 –

関連する問題