Я пишу хранимую процедуру, которая после завершения будет использоваться для сканирования промежуточных таблиц на наличие фиктивных данных по столбцам.
Первый шаг в упражнении заключался в том, чтобы просто просмотреть таблицу, что и делает приведенный ниже код. Проблема в том, что этот код запускается за 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(*) --- это не цель этого упражнения.