У меня есть оператор SQL SELECT, который очень быстро выполняется в SQL Server Management Studio (5 секунд), но выполняется очень медленно из моего кода ASP.NET.
Я читал, что это может быть связано ссниффинг параметров.Когда я запускаю инструкцию SELECT из SSMS, я использую SELECT.Но когда я смотрю SQL Profiler, мои операторы SELECT выполняются как хранимые процедуры с шаблоном: exec sp_executesql N'SELECT foo FROM bar WHERE userid = @ userid ', N' @ userid int ', @ userid = 2
Этот код ASP.NET истекает через четыре минуты (установка строки подключения):
SqlCommand objCommand = new SqlCommand("SELECT foo FROM bar WHERE userid = @userid", objCS);
SqlDataReader reader;
objCommand = new SqlCommand("", objCS);
objCommand.CommandType = CommandType.Text;
objCommand.Parameters.Add("@userid", SqlDbType.Int).Value = 1;
SqlDataReader reader = objCommand.ExecuteReader();
// время ожидания objCommand.ExecuteReader ();
Этот код выполняется в SQL Server ManagementStudio за 5 секунд:
DECLARE @userid AS Int = 2
SELECT foo FROM bar WHERE userid = @userid
Возвращает 60000+ строк за 5 секунд.
Как заставить код ASP.NET выполняться как оператор SELECT вместо хранимой процедуры при сохранениизначение безопасности параметризованных хранимых процедур?
РЕДАКТИРОВАТЬ: я думаю, что это может иметь отношение к другому пользователю, который выполняет код с операторами SQL по сравнению с пользователем, который выполняет операторы SQL в SSMS.Пользователь, работающий с кодом, имеет различные права доступа к серверу, включая ограниченный доступ к таблицам.Оператор SQL содержит представление, и пользователь не имеет основного доступа SELECT ко всем таблицам в этом представлении.Означает ли это также, что они не имеют доступа к статистике?