Каковы последствия общего обновления хранимых процедур для включения SET NOCOUNT ON - PullRequest
3 голосов
/ 01 марта 2011

Мы ввели новую структуру доступа к данным для вызова хранимых процедур SQL. При вызове хранимой процедуры, которая возвращает набор записей, мы столкнулись с проблемами, когда эта хранимая процедура также выполняет какое-либо обновление (вставка / обновление / удаление):

Невозможно изменить ActiveConnection свойство объекта Recordset, который имеет объект Command в качестве источника.

Решением этой проблемы является добавление «SET NOCOUNT ON» в начало хранимой процедуры. Это работает просто отлично, и, конечно, оно также имеет повышенную производительность.

Мы рекомендуем разработчикам, что, когда они хотят написать код для вызова существующей хранимой процедуры, они также должны реорганизовать саму хранимую процедуру, включив в нее SET NOCOUNT ON.

Но это заставило меня задуматься о том, каковы будут потенциальные последствия / риски выполнения общего обновления всех хранимых процедур, включая SET NOCOUNT ON. В каких случаях это нарушит функциональность SP? (учитывая, что функция @@ ROWCOUNT обновляется, даже когда SET NOCOUNT включен)

Помощь, как всегда, высоко ценится.

1 Ответ

5 голосов
/ 01 марта 2011

Я думаю, что главная опасность была бы, если какой-либо из ваших существующих процессов ищет и / или предполагает, что количество строк будет возвращено без явного запроса значения @@ROWCOUNT.

Возможно, что где-то в вашем коде находится хранимый процесс, который выполняется, и приложение ожидает, пока значение возвращаемой строки не узнает, что оно завершено, и в этом случае приложение зависнет на неопределенное время.

...