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