私はストアド プロシージャを作成しています。このストアド プロシージャは、完了するとステージング テーブルをスキャンして偽のデータを列ごとにスキャンするために使用されます。
演習のステップ 1 は、テーブルをスキャンすることでした --- 以下のコードは、これを実行します。問題は、このコードが 5:45 秒で実行されることです --- ただし、コンソール アプリとして実行される同じコード (もちろん、接続文字列を変更します) は約 44 秒で実行されます。
using (SqlConnection sqlConnection = new SqlConnection("context connection=true"))
{
sqlConnection.Open();
string sqlText = string.Format("select * from {0}", source_table.Value);
int count = 0;
using (SqlCommand sqlCommand = new SqlCommand(sqlText, sqlConnection))
{
SqlDataReader reader = sqlCommand.ExecuteReader();
while (reader.Read())
count++;
SqlDataRecord record = new SqlDataRecord(new SqlMetaData("rowcount", SqlDbType.Int));
SqlContext.Pipe.SendResultsStart(record);
record.SetInt32(0, count);
SqlContext.Pipe.SendResultsRow(record);
SqlContext.Pipe.SendResultsEnd();
}
}
ただし、同じコード (もちろん異なる接続文字列) がコンソール アプリで約 44 秒で実行されます (これは、クライアント側で期待していたものに近いです)。
SP側で何が欠けているので、実行が非常に遅くなります。
注: 行数が必要な場合は、count(*) 集計を使用する必要があることを十分に理解しています。これは、この演習の目的ではありません。