Хранимая процедура SQL-CLR не возвращает значение

Я просмотрел Stackoverflow и нашел почти идентичный вопрос здесь. Вопрос был задан год назад, но пока никто не ответил. Может мне повезет больше, чем user1038334 и мне кто-нибудь поможет.

У меня есть хранимая процедура SQL CLR, которая отлично работает в течение нескольких дней, пока не произойдет что-то странное. Моя хранимая процедура обновляет таблицы и возвращает значение в качестве кода результата. Поэтому, глядя на это значение, я могу решить, что что-то пошло не так. Проблема заключается в получении этого значения результата. Код C# создает исключение в момент получения возвращаемого значения.

var returnValue = new SqlParameter {Direction = ParameterDirection.ReturnValue};
command.Parameters.Add(returnValue);

connection.Open();
command.ExecuteNonQuery();

return (int)returnValue.Value; //<-- here is an exception

И самое смешное, что если я подключаю SQL Profiler, перехватываю запрос и затем выполняю этот запрос внутри SQL Server Management Studio, я все равно без проблем могу получить результирующее значение:

DECLARE @RC INT
EXECUTE @RC = MyClrStoreProc
SELECT @RC

Как только я повторно публикую сборку CLR или перезапускаю SQL Server, все исправляется.

Я почти уверен, что должна быть причина для такого странного поведения, но я не могу найти.

  • Версия SQL Server: Microsoft SQL Server Developer Edition (64-разрядная версия) — v.10.50.1765.0

  • Версия хост-ОС: Microsoft Windows NT 6.1 (7601)

  • Версия .Net: v4.0.30319

Любая помощь будет принята с благодарностью.


person davidoff    schedule 13.04.2012    source источник
comment
Что у вас установлено в command.CommandType?   -  person AdaTheDev    schedule 13.04.2012
comment
Сможете ли вы воспроизвести его, если запустите sp_recompile?   -  person Raj Ranjhan    schedule 13.04.2012
comment
@AdaTheDev: мой тип команды установлен на CommandType.StoredProcedure.   -  person davidoff    schedule 14.04.2012
comment
@Anurag Ranjhan: я не знаю ответа, так как проблема возникает не постоянно. Но обязательно проверю, как только повторится.   -  person davidoff    schedule 14.04.2012
comment
@AnuragRanjhan: извините за недоразумение. Прежде чем я посмотрел на вашу ссылку, я думал, что вы просите запустить sp_recompile после возникновения проблемы. Но теперь я вижу, что вы указали правильное решение для моего случая. И все же я должен сказать одну вещь. SP_RECOMPILE не вызывал проблемы. Я попробовал другой способ вызвать перекомпиляцию процесса хранилища: DBCC FREEPROCCACHE WITH NO_INFOMSGS; и только это вызвало описанную проблему. Я уже попросил нашего администратора баз данных установить SP. Вернусь позже и сообщу о состоянии моей проблемы. В очередной раз благодарим за помощь   -  person davidoff    schedule 14.04.2012


Ответы (1)


Это ошибка SQL Server, и накопительный пакет обновления 8 устраняет эту проблему.

person davidoff    schedule 07.06.2012