入力パラメータが指定されていればWhere句の条件に追加する方法
PowerShellからSQLを使ってデータ取得し、取得した結果をCSV出力する処理を行います。
その際、Where句の条件を入力パラメータとして指定して、入力パラメータがあればそのパラメータを条件として追加。
無い場合はWhere句の条件を付けずにSQLを実行する方法です。
Param( [Parameter(Mandatory = $true,Position = 0)] [DateTime] $a, [Parameter(Mandatory = $true,Position = 1)] [AllowEmptyString()] [String] $b ) [void][System.Reflection.Assembly]::LoadWithPartialName("System.Data") $connectionString = "Data Source=.;Initial Catalog=[DB名];Integrated Security=True;" $Con = New-Object System.Data.SqlClient.SqlConnection($connectionString) $Con.Open() $Cmd = New-Object System.Data.SqlClient.SqlCommand $Cmd.Connection = $Con $DateFrom = $a.ToString('yyyy-MM-dd HH:mm:ss') $SQL = "SELECT * FROM [dbo].[hogehoge] WHERE Column1 >= '$DateFrom'" $Where_SQL = $null #$bパラメータが指定されていた場合、SQLに条件を追加 if($b){ $Where_SQL = "AND Column2 = '$b'" } $Cmd.CommandText = $SQL + $Where_SQL $Datas = New-Object System.Collections.ArrayList $ClientReader = $Cmd.ExecuteReader() while ($ClientReader.Read()) { $Data = New-Object PSObject | Select-Object AttributeMask $Data.AttributeMask = $ClientReader["AttributeMask"].ToString() [void]$Datas.Add($Data) } $OutputFilename = "C:\Temp\test.csv" $Datas | Export-Csv $OutputFilename -Encoding Default $ClientReader.Dispose() $Con.Close() $Con.Dispose()
$bは入力必須項目ですが、パラメータ検証属性「AllowEmptyString」付いているため空文字列を指定することが可能です。
$Where_SQL = $null #$bパラメータが指定されていた場合、SQLに条件を追加 if($b){ $Where_SQL = "AND Column2 = '$b'" }
上記の条件分岐で$bパラメータが指定されていた場合は、$Where_SQLに条件を文字列として追加し、
$bパラメータが指定されていない場合は、$Where_SQLをNULLとします。
$Cmd.CommandText = $SQL + $Where_SQL
後は、変数を連結させれば終わり。