Какой подход лучше, 2 вызова хранимых процедур или один большой вызов и просто отфильтровать список? - PullRequest
0 голосов
/ 29 августа 2018

Это скорее вопрос производительности, а не кода.

Таким образом, в нашем требовании нам нужно проверить человека в базе данных с указанным ssn под определенным «администратором». Нам также необходимо проверить, находится ли супруга этого человека под тем же администратором.

У нас есть хранимая процедура, которая извлекает всех лиц с указанным администратором.

В нашем коде C # у нас есть список, скажем, встреч. Каждый объект содержит данные для ssn человека и супруга, а также идентификатор администратора.

foreach(var obj in myList) {
    Guid adminID = obj.Admin;
    string spouseSSN = obj.SpouseSSN,
      iSSN = obj.PersonSSn;

    List < Person > adminSub = RetrievePersonsUnderAdmin(adminID); //calls the sp

    Person spouse = adminSub.FirstOrDefault(p => p.SSN == spouseSSN);
    Person iPerson = adminSub.FirstOrDefault(p => p.SSN == iSSN);
}

Это предыдущая реализация. Теперь мы хотели изменить sp, чтобы мы могли сразу же получить человека с помощью ssn. То, что я сделал, заставило его принять необязательный параметр @OptionalCondition nvarchar(max), который будет добавлен к предложению WHERE:

BEGIN
    DECLARE
        @query nvarchar(max)
        SET @query = 
            'SELECT
                . . . . -- select columns
            WHERE
                . . . . -- where clause
            ' + ISNULL(@CustomCondition, '') -- additional conditions @CustomCondition, optional
    EXEC sys.sp_executesql @query
END

Таким образом, мы могли бы использовать его в нашем коде C # для этого:

Person spouse = RetrievePersonsUnderAdmin(adminID, string.Format("AND p.SSN = '{0}'", spouseSSN)).FirstOrDefault();

Person spouse = RetrievePersonsUnderAdmin(adminID, string.Format("AND p.SSN = '{0}'", iSSN )).FirstOrDefault();

Вопрос в том, что лучше, вызывая 2 sp или предыдущую реализацию? Обратите внимание, что администратор может иметь 500 - 1000 подчиненных.

EDIT:

Если вы, ребята, можете, вы можете опубликовать здесь свои ответы, а также учесть все недостатки, которые вы наблюдали в моем коде. Таким образом, будущие разработчики могут натолкнуться на те же вопросы, что и у меня, и, надеюсь, эта статья поможет им. Спасибо за парни в разделе комментариев за помощь.

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