Есть ли лучший подход, чем хранимая процедура SQL?

#sql #tsql #sql-server-2008 #stored-procedures

#sql #tsql #sql-server-2008 #хранимые процедуры

Вопрос:

Я создал хранимую процедуру GetNotifications , которая возвращает все уведомления для определенного пользователя. Другие разработчики используют этот SP во многих разных местах.

Теперь у нас есть необходимость реализовать функциональность подкачки, чтобы мы не наводняли пользователей всеми уведомлениями одновременно.

Я не могу изменить существующий SP, поскольку он используется.

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

Это то, что я могу сделать: создайте новый SP, который внутренне вызывает GetNotifications , а затем реализует подкачку по возвращенному результирующему набору. Но тогда не будет ли это ненужной нагрузкой на сервер, поскольку GetNotifications он вернет все результаты независимо?

Можете ли вы придумать лучший способ решения этой проблемы?

Комментарии:

1. Можете ли вы преобразовать основную часть запроса в представление или табличную функцию?

Ответ №1:

Измените хранимую процедуру с помощью необязательного параметра, чтобы возвращать либо выгружаемую функциональность, либо все результаты (по умолчанию). Это должно дать вам необходимую функциональность, не нарушая существующий код.

Ответ №2:

Есть один сохраненный процесс, который принимает 2 параметра: @PageNumber, @rowsPerPage

Если для обоих параметров передано значение 0, верните все строки, в противном случае выполните подкачку.

Обновите существующий код, чтобы передать 0/0 для аргументов, тогда ваш новый код может передавать фактические значения, если / когда он хочет подкачки.

Как было предложено в комментариях, если вы укажете значения по умолчанию 0/0 для параметров, вам даже не нужно обновлять существующий код.

Комментарии:

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