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