データベースから任意の SQL クエリを取得する PowerShell スクリプトを作成しています。これらのクエリは非常に大きくなる可能性があり、sqlcmd を試した後、StreamWriter と SqlCommand の組み合わせになりました。私が抱えている問題は、実行が少し遅いことです。10倍遅いように。より高速にする必要があると言われているので、質問です。コードに!
$conn.ChangeDatabase("MyDB")
$mycmd = new-object System.Data.SqlClient.SqlCommand($Myquery, $conn)
$mycmd.CommandType = [System.Data.CommandType]::Text
$mycmd.CommandTimeout = 300
echo "Executing Reader."
$Results = $mycmd.ExecuteReader()
echo "Opening file for writing."
$sw2 = new-object system.IO.StreamWriter($sqlOutput, 1)
echo "File Opened for Writing."
$delimiter = ","
echo "Starting Row Reading"
$Counter = $Results.FieldCount
echo $Counter
# Put in header row on first execution.
$currtext = ""
if ($Counter -gt 0)
{
echo "Writing Header Row as:"
for ($i = 0; $i -lt $Counter; $i++)
{
$currtext = $currtext + $Results.GetName($i)
if ($i -lt $Counter - 1)
{$currtext = $currtext + $delimiter}
}
echo $currtext
$sw2.writeline($currtext)
$firstexecution = 0
}
else
{
$sw2.writeline("No Data Found")
}
$rowcount = 0
while ($Results.Read())
{
$rowcount = $rowcount + 1
#echo "Reading Row"
$i = 0
$currtext = ""
for ($i = 0; $i -lt $Counter; $i++)
{
#echo "Processing Row"
$currtext = $currtext + """" + [string]$Results[$i] + """"
if ($i -lt $Counter - 1)
{ $currtext = $currtext + $delimiter }
}
#echo "Writing Line."
#echo $currtext
$sw2.writeline($currtext)
}
echo "Total Rowcount:" + $rowcount
$sw2.flush()
$sw2.close()
$sw2.dispose()
$Results.close()
私が間違っていること/修正方法を知っている人はいますか?