Странная проблема с хранимой процедурой сервера SQL 2005, выполняющей один и тот же SELECT много раз - PullRequest
2 голосов
/ 29 апреля 2010

У меня странная проблема. Позвольте мне дать вам некоторую информацию.

Существует хранимая процедура, имеющая один выбор, возвращающий набор данных и возвращаемое значение 0.

Перед "основным" выбором в sp, есть также поддельный выбор (из-за служб SSIS и codegen), похожий на этот:


IF (1=0)
BEGIN
 CONVERT(INT, NULL) AS Id
 ,CONVERT(VARCHAR(50), NULL) AS someColumn
        ,...
END

Есть еще одна необычная проблема: основная конструкция выбора использует ключевое слово «TOP» с целочисленной переменной вместо скалярного значения. Похоже:


SELECT TOP (@top)
...
...
FROM
...

Теперь к проблеме: когда процедура вызывается из SSMS напрямую, она запускается за несколько мс. При вызове из приложения он запускается несколько минут. Благодаря SQL Profiler мы выяснили, что «основной» выбор внутри процедуры вызывается тысячи раз, когда процедура вызывается из приложения (мы используем MS Enterprise объект библиотеки SqlDatabase, метод ExecuteReader; подход .NET 2.0).

Дело в том, что наше приложение вызывает сотни других процедур, не сталкиваясь с подобной проблемой в течение многих лет. Так что .. надеюсь, у кого-то есть знания, которых нам не хватает ..

1 Ответ

3 голосов
/ 29 апреля 2010

РЕШИТЬ!

Тем не менее, я не понимаю.Кажется, что проблема заключается в динамическом SQL (предложение TOP).Я удалил динамический синтаксис в соответствии с этой статьей , и это сработало (по крайней мере, пока).

Если кто-то может очистить его для меня, вопрос все еще стоит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...